! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 
! Linear Algebra Data and Routines File
! 
! Generated by KPP-2.2.3 symbolic chemistry Kinetics PreProcessor
!       (http://www.cs.vt.edu/~asandu/Software/KPP)
! KPP is distributed under GPL, the general public licence
!       (http://www.gnu.org/copyleft/gpl.html)
! (C) 1995-1997, V. Damian & A. Sandu, CGRER, Univ. Iowa
! (C) 1997-2005, A. Sandu, Michigan Tech, Virginia Tech
!     With important contributions from:
!        M. Damian, Villanova University, USA
!        R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany
! 
! File                 : aromatics_kpp_LinearAlgebra.f90
! Time                 : Tue Mar 31 13:07:55 2020
! Working directory    : /n/home08/kbates/Aromatics/GC_Porter_chamber
! Equation file        : aromatics_kpp.kpp
! Output root filename : aromatics_kpp
! 
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



MODULE aromatics_kpp_LinearAlgebra

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

  IMPLICIT NONE

CONTAINS


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 
! SPARSE_UTIL - SPARSE utility functions
!   Arguments :
! 
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppDecomp( JVS, IER )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Sparse LU factorization
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER  :: IER
      REAL(kind=dp) :: JVS(LU_NONZERO), W(NVAR), a
      INTEGER  :: k, kk, j, jj

      a = 0. ! mz_rs_20050606
      IER = 0
      DO k=1,NVAR
        ! mz_rs_20050606: don't check if real value == 0
        ! IF ( JVS( LU_DIAG(k) ) .EQ. 0. ) THEN
        IF ( ABS(JVS(LU_DIAG(k))) < TINY(a) ) THEN
            IER = k
            RETURN
        END IF
        DO kk = LU_CROW(k), LU_CROW(k+1)-1
              W( LU_ICOL(kk) ) = JVS(kk)
        END DO
        DO kk = LU_CROW(k), LU_DIAG(k)-1
            j = LU_ICOL(kk)
            a = -W(j) / JVS( LU_DIAG(j) )
            W(j) = -a
            DO jj = LU_DIAG(j)+1, LU_CROW(j+1)-1
               W( LU_ICOL(jj) ) = W( LU_ICOL(jj) ) + a*JVS(jj)
            END DO
         END DO
         DO kk = LU_CROW(k), LU_CROW(k+1)-1
            JVS(kk) = W( LU_ICOL(kk) )
         END DO
      END DO
      
END SUBROUTINE KppDecomp


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppDecompCmplx( JVS, IER )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Sparse LU factorization, complex
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER        :: IER
      DOUBLE COMPLEX :: JVS(LU_NONZERO), W(NVAR), a
      REAL(kind=dp)  :: b = 0.0
      INTEGER        :: k, kk, j, jj

      IER = 0
      DO k=1,NVAR
        IF ( ABS(JVS(LU_DIAG(k))) < TINY(b) ) THEN
            IER = k
            RETURN
        END IF
        DO kk = LU_CROW(k), LU_CROW(k+1)-1
              W( LU_ICOL(kk) ) = JVS(kk)
        END DO
        DO kk = LU_CROW(k), LU_DIAG(k)-1
            j = LU_ICOL(kk)
            a = -W(j) / JVS( LU_DIAG(j) )
            W(j) = -a
            DO jj = LU_DIAG(j)+1, LU_CROW(j+1)-1
               W( LU_ICOL(jj) ) = W( LU_ICOL(jj) ) + a*JVS(jj)
            END DO
         END DO
         DO kk = LU_CROW(k), LU_CROW(k+1)-1
            JVS(kk) = W( LU_ICOL(kk) )
         END DO
      END DO
      
END SUBROUTINE KppDecompCmplx


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppDecompCmplxR( JVSR, JVSI, IER )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!    Sparse LU factorization, complex
!   (Real and Imaginary parts are used instead of complex data type)     
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER       :: IER
      REAL(kind=dp) :: JVSR(LU_NONZERO), JVSI(LU_NONZERO) 
      REAL(kind=dp) :: WR(NVAR), WI(NVAR), ar, ai, den
      INTEGER       :: k, kk, j, jj

      IER = 0
      ar  = 0.0
      DO k=1,NVAR
        IF (  ( ABS(JVSR(LU_DIAG(k))) < TINY(ar) ) .AND. &
              ( ABS(JVSI(LU_DIAG(k))) < TINY(ar) ) )  THEN
            IER = k
            RETURN
        END IF
        DO kk = LU_CROW(k), LU_CROW(k+1)-1
              WR( LU_ICOL(kk) ) = JVSR(kk)
              WI( LU_ICOL(kk) ) = JVSI(kk)
        END DO
        DO kk = LU_CROW(k), LU_DIAG(k)-1
            j = LU_ICOL(kk)
            den = JVSR(LU_DIAG(j))**2 + JVSI(LU_DIAG(j))**2
            ar = -(WR(j)*JVSR(LU_DIAG(j)) + WI(j)*JVSI(LU_DIAG(j)))/den
            ai = -(WI(j)*JVSR(LU_DIAG(j)) - WR(j)*JVSI(LU_DIAG(j)))/den
            WR(j) = -ar
            WI(j) = -ai
            DO jj = LU_DIAG(j)+1, LU_CROW(j+1)-1
               WR( LU_ICOL(jj) ) = WR( LU_ICOL(jj) ) + ar*JVSR(jj) - ai*JVSI(jj)
               WI( LU_ICOL(jj) ) = WI( LU_ICOL(jj) ) + ar*JVSI(jj) + ai*JVSR(jj)
            END DO
         END DO
         DO kk = LU_CROW(k), LU_CROW(k+1)-1
            JVSR(kk) = WR( LU_ICOL(kk) )
            JVSI(kk) = WI( LU_ICOL(kk) )
         END DO
      END DO

END SUBROUTINE KppDecompCmplxR


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveIndirect( JVS, X )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Sparse solve subroutine using indirect addressing
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER  :: i, j
      REAL(kind=dp) :: JVS(LU_NONZERO), X(NVAR), sum

      DO i=1,NVAR
         DO j = LU_CROW(i), LU_DIAG(i)-1 
             X(i) = X(i) - JVS(j)*X(LU_ICOL(j));
         END DO  
      END DO

      DO i=NVAR,1,-1
        sum = X(i);
        DO j = LU_DIAG(i)+1, LU_CROW(i+1)-1
          sum = sum - JVS(j)*X(LU_ICOL(j));
        END DO
        X(i) = sum/JVS(LU_DIAG(i));
      END DO
      
END SUBROUTINE KppSolveIndirect


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveTRIndirect( JVS, X )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Complex sparse solve transpose subroutine using indirect addressing
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER       :: i, j
      REAL(kind=dp) :: JVS(LU_NONZERO), X(NVAR)

      DO i=1,NVAR
        X(i) = X(i)/JVS(LU_DIAG(i))
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_DIAG(i)+1,LU_CROW(i+1)-1
	  X(LU_ICOL(j)) = X(LU_ICOL(j))-JVS(j)*X(i)
	END DO
      END DO

      DO i=NVAR, 1, -1
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_CROW(i),LU_DIAG(i)-1
	  X(LU_ICOL(j)) = X(LU_ICOL(j))-JVS(j)*X(i)
	END DO
      END DO
      
END SUBROUTINE KppSolveTRIndirect


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveCmplx( JVS, X )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Complex sparse solve subroutine using indirect addressing
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER        :: i, j
      DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR), sum

      DO i=1,NVAR
         DO j = LU_CROW(i), LU_DIAG(i)-1 
             X(i) = X(i) - JVS(j)*X(LU_ICOL(j));
         END DO  
      END DO

      DO i=NVAR,1,-1
        sum = X(i);
        DO j = LU_DIAG(i)+1, LU_CROW(i+1)-1
          sum = sum - JVS(j)*X(LU_ICOL(j));
        END DO
        X(i) = sum/JVS(LU_DIAG(i));
      END DO
      
END SUBROUTINE KppSolveCmplx

! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveCmplxR( JVSR, JVSI, XR, XI )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!   Complex sparse solve subroutine using indirect addressing
!   (Real and Imaginary parts are used instead of complex data type)     
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER       ::  i, j
      REAL(kind=dp) ::  JVSR(LU_NONZERO), JVSI(LU_NONZERO), XR(NVAR), XI(NVAR), sumr, sumi, den

      DO i=1,NVAR
         DO j = LU_CROW(i), LU_DIAG(i)-1 
             XR(i) = XR(i) - (JVSR(j)*XR(LU_ICOL(j)) - JVSI(j)*XI(LU_ICOL(j)))
             XI(i) = XI(i) - (JVSR(j)*XI(LU_ICOL(j)) + JVSI(j)*XR(LU_ICOL(j)))
         END DO  
      END DO

      DO i=NVAR,1,-1
        sumr = XR(i); sumi = XI(i)
        DO j = LU_DIAG(i)+1, LU_CROW(i+1)-1
            sumr = sumr - (JVSR(j)*XR(LU_ICOL(j)) - JVSI(j)*XI(LU_ICOL(j)))
            sumi = sumi - (JVSR(j)*XI(LU_ICOL(j)) + JVSI(j)*XR(LU_ICOL(j)))
        END DO
        den   = JVSR(LU_DIAG(i))**2 + JVSI(LU_DIAG(i))**2
        XR(i) = (sumr*JVSR(LU_DIAG(i)) + sumi*JVSI(LU_DIAG(i)))/den
        XI(i) = (sumi*JVSR(LU_DIAG(i)) - sumr*JVSI(LU_DIAG(i)))/den
      END DO
      
END SUBROUTINE KppSolveCmplxR


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveTRCmplx( JVS, X )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!        Complex sparse solve transpose subroutine using indirect addressing
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER        :: i, j
      DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR)

      DO i=1,NVAR
        X(i) = X(i)/JVS(LU_DIAG(i))
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_DIAG(i)+1,LU_CROW(i+1)-1
	  X(LU_ICOL(j)) = X(LU_ICOL(j))-JVS(j)*X(i)
	END DO
      END DO

      DO i=NVAR, 1, -1
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_CROW(i),LU_DIAG(i)-1
	  X(LU_ICOL(j)) = X(LU_ICOL(j))-JVS(j)*X(i)
	END DO
      END DO
      
END SUBROUTINE KppSolveTRCmplx


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUBROUTINE KppSolveTRCmplxR( JVSR, JVSI, XR, XI )
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!   Complex sparse solve transpose subroutine using indirect addressing
!   (Real and Imaginary parts are used instead of complex data type)     
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  USE aromatics_kpp_Parameters
  USE aromatics_kpp_JacobianSP

      INTEGER       ::  i, j
      REAL(kind=dp) ::  JVSR(LU_NONZERO), JVSI(LU_NONZERO), XR(NVAR), XI(NVAR), den

      DO i=1,NVAR
        den   = JVSR(LU_DIAG(i))**2 + JVSI(LU_DIAG(i))**2
        XR(i) = (XR(i)*JVSR(LU_DIAG(i)) + XI(i)*JVSI(LU_DIAG(i)))/den
        XI(i) = (XI(i)*JVSR(LU_DIAG(i)) - XR(i)*JVSI(LU_DIAG(i)))/den
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_DIAG(i)+1,LU_CROW(i+1)-1
	  XR(LU_ICOL(j)) = XR(LU_ICOL(j))-(JVSR(j)*XR(i) - JVSI(j)*XI(i))
	  XI(LU_ICOL(j)) = XI(LU_ICOL(j))-(JVSI(j)*XR(i) + JVSR(j)*XI(i))
	END DO
      END DO

      DO i=NVAR, 1, -1
	! subtract all nonzero elements in row i of JVS from X
        DO j=LU_CROW(i),LU_DIAG(i)-1
	  XR(LU_ICOL(j)) = XR(LU_ICOL(j))-(JVSR(j)*XR(i) - JVSI(j)*XI(i))
	  XI(LU_ICOL(j)) = XI(LU_ICOL(j))-(JVSI(j)*XR(i) + JVSR(j)*XI(i))
	END DO
      END DO
      
END SUBROUTINE KppSolveTRCmplxR


!
! Next few commented subroutines perform sparse big linear algebra
!
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!SUBROUTINE KppDecompBig( JVS, IP, IER )
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!        Sparse LU factorization
!!        for the Runge Kutta (3n)x(3n) linear system
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!  USE aromatics_kpp_Parameters
!  USE aromatics_kpp_JacobianSP
!
!      INTEGER  :: IP3(3), IER, IP(3,NVAR)
!      REAL(kind=dp) :: JVS(3,3,LU_NONZERO), W(3,3,NVAR), a(3,3), E(3,3)
!      INTEGER  :: k, kk, j, jj
!
!      a = 0.0d0
!      IER = 0
!      DO k=1,NVAR
!        DO kk = LU_CROW(k), LU_CROW(k+1)-1
!              W( 1:3,1:3,LU_ICOL(kk) ) = JVS(1:3,1:3,kk)
!        END DO
!        DO kk = LU_CROW(k), LU_DIAG(k)-1
!            j = LU_ICOL(kk)
!            E(1:3,1:3) = JVS( 1:3,1:3,LU_DIAG(j) )
!            ! CALL DGETRF(3,3,E,3,IP3,IER) 
!            CALL FAC3(E,IP3,IER)
!            IF ( IER /= 0 )  RETURN
!            ! a = W(j) / JVS( LU_DIAG(j) )
!            a(1:3,1:3) = W( 1:3,1:3,j )
!            ! CALL DGETRS ('N',3,3,E,3,IP3,a,3,IER) 
!            CALL SOL3('N',E,IP3,a(1,1))
!            CALL SOL3('N',E,IP3,a(1,2))
!            CALL SOL3('N',E,IP3,a(1,3))
!            W(1:3,1:3,j) = a(1:3,1:3)
!            DO jj = LU_DIAG(j)+1, LU_CROW(j+1)-1
!               W( 1:3,1:3,LU_ICOL(jj) ) = W( 1:3,1:3,LU_ICOL(jj) ) &
!                        - MATMUL( a(1:3,1:3) , JVS(1:3,1:3,jj) )
!            END DO
!         END DO
!         DO kk = LU_CROW(k), LU_CROW(k+1)-1
!            JVS(1:3,1:3,kk) = W( 1:3,1:3,LU_ICOL(kk) )
!         END DO
!      END DO
!
!      DO k=1,NVAR
!         ! CALL WGEFA(JVS(1,1,LU_DIAG(k)),3,3,IP(1,k),IER)
!         ! CALL DGETRF(3,3,JVS(1,1,LU_DIAG(k)),3,IP(1,k),IER)
!         CALL FAC3(JVS(1,1,LU_DIAG(k)),IP(1,k),IER)
!         IF ( IER /= 0 )  RETURN
!      END DO 
!      
!END SUBROUTINE KppDecompBig
!
!
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!SUBROUTINE KppSolveBig( JVS, IP, X )
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!        Sparse solve subroutine using indirect addressing
!!        for the Runge Kutta (3n)x(3n) linear system
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!  USE aromatics_kpp_Parameters
!  USE aromatics_kpp_JacobianSP
!
!      INTEGER  :: i, j, k, m, IP3(3), IP(3,NVAR), IER
!      REAL(kind=dp) :: JVS(3,3,LU_NONZERO), X(3,NVAR), sum(3)
!
!      DO i=1,NVAR
!        DO j = LU_CROW(i), LU_DIAG(i)-1 
!          !X(1:3,i) = X(1:3,i) - MATMUL(JVS(1:3,1:3,j),X(1:3,LU_ICOL(j)));
!          DO k=1,3
!            DO m=1,3
!	       X(k,i) = X(k,i) - JVS(k,m,j)*X(m,LU_ICOL(j))
!            END DO
!          END DO
!        END DO  
!      END DO
!
!      DO i=NVAR,1,-1
!        sum(1:3) = X(1:3,i);
!        DO j = LU_DIAG(i)+1, LU_CROW(i+1)-1
!          !sum(1:3) = sum(1:3) - MATMUL(JVS(1:3,1:3,j),X(1:3,LU_ICOL(j)));
!          DO k=1,3
!            DO m=1,3
!	       sum(k) = sum(k) - JVS(k,m,j)*X(m,LU_ICOL(j))
!            END DO
!          END DO
!        END DO
!        ! X(i) = sum/JVS(LU_DIAG(i));
!        ! CALL DGETRS ('N',3,1,JVS(1:3,1:3,LU_DIAG(i)),3,IP(1,i),sum,3,0) 
!        ! CALL WGESL('N',JVS(1,1,LU_DIAG(i)),3,3,IP(1,i),sum)
!        CALL SOL3('N',JVS(1,1,LU_DIAG(i)),IP(1,i),sum)
!        X(1:3,i) = sum(1:3)
!      END DO
!      
!END SUBROUTINE KppSolveBig
!
!
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!SUBROUTINE KppSolveBigTR( JVS, IP, X )
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!        Big sparse transpose solve using indirect addressing
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!  USE aromatics_kpp_Parameters
!  USE aromatics_kpp_JacobianSP
!
!      INTEGER       :: i, j, k, m, IP(3,NVAR)
!      REAL(kind=dp) :: JVS(3,3,LU_NONZERO), X(3,NVAR)
!
!      DO i=1,NVAR
!        ! X(i) = X(i)/JVS(LU_DIAG(i))
!        CALL SOL3('T',JVS(1,1,LU_DIAG(i)),IP(1,i),X(1,i))
!        DO j=LU_DIAG(i)+1,LU_CROW(i+1)-1
!	  !X(1:3,LU_ICOL(j)) = X(1:3,LU_ICOL(j)) &
!          !    - MATMUL( TRANSPOSE(JVS(1:3,1:3,j)), X(1:3,i) )
!          DO k=1,3
!            DO m=1,3
!	       X(k,LU_ICOL(j)) = X(k,LU_ICOL(j)) - JVS(m,k,j)*X(m,i)
!            END DO
!          END DO
!	END DO
!      END DO
!
!      DO i=NVAR, 1, -1
!        DO j=LU_CROW(i),LU_DIAG(i)-1
!	  !X(1:3,LU_ICOL(j)) = X(1:3,LU_ICOL(j)) &
!          !   - MATMUL( TRANSPOSE(JVS(1:3,1:3,j)), X(1:3,i) )
!          DO k=1,3
!            DO m=1,3
!	       X(k,LU_ICOL(j)) = X(k,LU_ICOL(j)) - JVS(m,k,j)*X(m,i)
!            END DO
!          END DO
!	END DO
!      END DO
!      
!END SUBROUTINE KppSolveBigTR
!
!
!
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!SUBROUTINE FAC3(A,IPVT,INFO)
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!     FAC3 FACTORS THE MATRIX A (3,3) BY
!!           GAUSS ELIMINATION WITH PARTIAL PIVOTING
!!     LINPACK - LIKE 
!!
!!     Remove comments to perform pivoting
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!
!      REAL(kind=dp) :: A(3,3)
!      INTEGER       :: IPVT(3),INFO
!!      INTEGER       :: L
!!      REAL(kind=dp) :: t, dmax, da, TMP(3)
!      REAL(kind=dp), PARAMETER :: ZERO = 0.0, ONE = 1.0
!
!      info = 0
!!      t = TINY(da)
!!      
!!      da = ABS(A(1,1)); L = 1
!!      IF ( ABS(A(2,1))>da ) THEN
!!        da = ABS(A(2,1)); L = 2
!!        IF ( ABS(A(3,1))>da ) THEN
!!          L = 3
!!        END IF  
!!      END IF  
!!      IPVT(1)  = L
!!      IF (L /=1 ) THEN
!!         TMP(1:3) = A(L,1:3)
!!         A(L,1:3) = A(1,1:3)
!!         A(1,1:3) = TMP(1:3)
!!      END IF
!!      IF (ABS(A(1,1)) < t) THEN
!!         info = 1
!!         return
!!      END IF   
!!
!      A(2,1) = A(2,1)/A(1,1)
!      A(2,2) = A(2,2) - A(2,1)*A(1,2)
!      A(2,3) = A(2,3) - A(2,1)*A(1,3)
!      A(3,1) = A(3,1)/A(1,1)
!      A(3,2) = A(3,2) - A(3,1)*A(1,2)
!      A(3,3) = A(3,3) - A(3,1)*A(1,3)
!      
!!      IPVT(2)  = 2
!!      IF (ABS(A(3,2))>ABS(A(2,2))) THEN
!!         IPVT(2)  = 3
!!         TMP(2:3) = A(3,2:3)
!!         A(3,2:3) = A(2,2:3)
!!         A(2,2:3) = TMP(2:3)
!!      END IF
!!      IF (ABS(A(2,2)) < t) THEN
!!         info = 1
!!         return
!!      END IF   
!!      
!      A(3,2)   = A(3,2)/A(2,2)
!      A(3,3)   = A(3,3) - A(3,2)*A(2,3)
!      IPVT(3)  = 3
!      
!END SUBROUTINE FAC3
!
!
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!SUBROUTINE SOL3(Trans,A,IPVT,b)
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!     SOL3 solves the system 3x3
!!     A * x = b  or  trans(a) * x = b
!!     using the factors computed by WGEFA.
!!
!!     Trans      = 'N'   to solve  A*x = b ,
!!                = 'T'   to solve  transpose(A)*x = b
!!     LINPACK - LIKE 
!!
!!     Remove comments to use pivoting
!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!      CHARACTER     :: Trans
!      REAL(kind=dp) :: a(3,3),b(3)
!      INTEGER       :: IPVT(3)
!!      INTEGER       :: L
!!      REAL(kind=dp) :: TMP
!      
!      SELECT CASE (Trans)
!
!      CASE ('n','N')  !  Solve  A * x = b
!
!!     Solve  L*y = b
!!         L = IPVT(1)
!!         IF (L /= 1) THEN
!!            TMP = B(1); B(1) = B(L); B(L) = TMP
!!         END IF
!         b(2) = b(2)-A(2,1)*b(1)
!         b(3) = b(3)-A(3,1)*b(1)
!         
!!         L = IPVT(2)
!!         IF (L /= 2) THEN
!!            TMP = B(2); B(2) = B(L); B(L) = TMP
!!         END IF
!         b(3) = b(3)-A(3,2)*b(2)
!
!!     Solve  U*x = y
!         b(3) = b(3)/A(3,3)
!         b(2) = (b(2)-A(2,3)*b(3))/A(2,2)
!         b(1) = (b(1)-A(1,3)*b(3)-A(1,2)*b(2))/A(1,1)
!      
!      
!      CASE ('t','T')  !  Solve transpose(A) * x = b
!
!!      Solve transpose(U)*y = b
!         b(1) = b(1)/A(1,1)
!         b(2) = (b(2)-A(1,2)*b(1))/A(2,2)
!         b(3) = (b(3)-A(1,3)*b(1)-A(2,3)*b(2))/A(3,3)
!
!!      Solve transpose(L)*x = y
!         b(2) = b(2)-A(3,2)*b(3)
!!         L = ipvt(2)
!!         IF (L /= 2) THEN
!!            TMP = B(2); B(2) = B(L); B(L) = TMP
!!         END IF
!         b(1) = b(1)-A(3,1)*b(3)-A(2,1)*b(2)
!!         L = ipvt(1)
!!         IF (L /= 1) THEN
!!            TMP = B(1); B(1) = B(L); B(L) = TMP
!!         END IF
!   
!      END SELECT
!
!END SUBROUTINE SOL3

! End of SPARSE_UTIL function
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 
! KppSolve - sparse back substitution
!   Arguments :
!      JVS       - sparse Jacobian of variables
!      X         - Vector for variables
! 
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SUBROUTINE KppSolve ( JVS, X )

! JVS - sparse Jacobian of variables
  REAL(kind=dp) :: JVS(LU_NONZERO)
! X - Vector for variables
  REAL(kind=dp) :: X(NVAR)

  X(51) = X(51)-JVS(272)*X(24)
  X(52) = X(52)-JVS(278)*X(32)
  X(53) = X(53)-JVS(282)*X(30)-JVS(283)*X(31)-JVS(284)*X(52)
  X(57) = X(57)-JVS(306)*X(32)
  X(67) = X(67)-JVS(350)*X(59)
  X(71) = X(71)-JVS(379)*X(69)
  X(82) = X(82)-JVS(446)*X(45)
  X(86) = X(86)-JVS(484)*X(70)
  X(88) = X(88)-JVS(497)*X(28)
  X(90) = X(90)-JVS(510)*X(41)
  X(96) = X(96)-JVS(550)*X(95)
  X(97) = X(97)-JVS(556)*X(66)-JVS(557)*X(83)-JVS(558)*X(88)-JVS(559)*X(96)
  X(98) = X(98)-JVS(592)*X(25)-JVS(593)*X(44)
  X(99) = X(99)-JVS(602)*X(93)
  X(100) = X(100)-JVS(612)*X(31)
  X(102) = X(102)-JVS(625)*X(38)-JVS(626)*X(39)-JVS(627)*X(52)-JVS(628)*X(53)-JVS(629)*X(57)-JVS(630)*X(86)-JVS(631)&
             &*X(87)-JVS(632)*X(91)-JVS(633)*X(93)-JVS(634)*X(100)
  X(103) = X(103)-JVS(658)*X(30)
  X(104) = X(104)-JVS(665)*X(34)-JVS(666)*X(36)-JVS(667)*X(37)-JVS(668)*X(64)-JVS(669)*X(72)-JVS(670)*X(73)-JVS(671)&
             &*X(93)
  X(105) = X(105)-JVS(679)*X(98)-JVS(680)*X(101)
  X(107) = X(107)-JVS(711)*X(25)-JVS(712)*X(45)
  X(108) = X(108)-JVS(721)*X(32)
  X(109) = X(109)-JVS(729)*X(60)-JVS(730)*X(82)-JVS(731)*X(107)
  X(110) = X(110)-JVS(741)*X(55)-JVS(742)*X(96)
  X(111) = X(111)-JVS(752)*X(74)
  X(112) = X(112)-JVS(759)*X(59)-JVS(760)*X(65)-JVS(761)*X(69)-JVS(762)*X(81)-JVS(763)*X(87)-JVS(764)*X(99)-JVS(765)&
             &*X(104)-JVS(766)*X(111)
  X(113) = X(113)-JVS(783)*X(56)-JVS(784)*X(96)
  X(114) = X(114)-JVS(794)*X(93)-JVS(795)*X(111)
  X(117) = X(117)-JVS(819)*X(56)-JVS(820)*X(93)-JVS(821)*X(101)-JVS(822)*X(106)-JVS(823)*X(111)-JVS(824)*X(113)-JVS(825)&
             &*X(115)-JVS(826)*X(116)
  X(118) = X(118)-JVS(842)*X(74)-JVS(843)*X(93)-JVS(844)*X(111)
  X(119) = X(119)-JVS(852)*X(75)-JVS(853)*X(116)
  X(121) = X(121)-JVS(871)*X(74)-JVS(872)*X(111)-JVS(873)*X(118)
  X(122) = X(122)-JVS(884)*X(65)-JVS(885)*X(95)
  X(123) = X(123)-JVS(895)*X(52)-JVS(896)*X(53)-JVS(897)*X(57)-JVS(898)*X(66)
  X(124) = X(124)-JVS(908)*X(66)-JVS(909)*X(91)-JVS(910)*X(100)-JVS(911)*X(103)-JVS(912)*X(108)-JVS(913)*X(123)
  X(125) = X(125)-JVS(922)*X(52)-JVS(923)*X(53)-JVS(924)*X(66)-JVS(925)*X(123)-JVS(926)*X(124)
  X(126) = X(126)-JVS(935)*X(26)-JVS(936)*X(57)-JVS(937)*X(59)-JVS(938)*X(61)-JVS(939)*X(66)-JVS(940)*X(67)-JVS(941)&
             &*X(87)-JVS(942)*X(101)-JVS(943)*X(103)-JVS(944)*X(104)-JVS(945)*X(106)-JVS(946)*X(108)-JVS(947)*X(112)&
             &-JVS(948)*X(118)-JVS(949)*X(122)-JVS(950)*X(123)-JVS(951)*X(124)-JVS(952)*X(125)
  X(127) = X(127)-JVS(969)*X(39)-JVS(970)*X(80)-JVS(971)*X(100)-JVS(972)*X(103)-JVS(973)*X(108)-JVS(974)*X(123)-JVS(975)&
             &*X(124)-JVS(976)*X(125)
  X(128) = X(128)-JVS(990)*X(29)-JVS(991)*X(50)-JVS(992)*X(115)
  X(130) = X(130)-JVS(1012)*X(69)-JVS(1013)*X(72)-JVS(1014)*X(73)
  X(131) = X(131)-JVS(1023)*X(42)-JVS(1024)*X(43)-JVS(1025)*X(55)-JVS(1026)*X(59)-JVS(1027)*X(60)-JVS(1028)*X(62)&
             &-JVS(1029)*X(63)-JVS(1030)*X(64)-JVS(1031)*X(65)-JVS(1032)*X(72)-JVS(1033)*X(73)-JVS(1034)*X(75)-JVS(1035)&
             &*X(76)-JVS(1036)*X(79)-JVS(1037)*X(88)-JVS(1038)*X(90)-JVS(1039)*X(92)-JVS(1040)*X(93)-JVS(1041)*X(94)&
             &-JVS(1042)*X(95)-JVS(1043)*X(96)-JVS(1044)*X(98)-JVS(1045)*X(99)-JVS(1046)*X(100)-JVS(1047)*X(101)-JVS(1048)&
             &*X(103)-JVS(1049)*X(104)-JVS(1050)*X(105)-JVS(1051)*X(106)-JVS(1052)*X(107)-JVS(1053)*X(108)-JVS(1054)*X(109)&
             &-JVS(1055)*X(110)-JVS(1056)*X(111)-JVS(1057)*X(112)-JVS(1058)*X(113)-JVS(1059)*X(114)-JVS(1060)*X(115)&
             &-JVS(1061)*X(116)-JVS(1062)*X(117)-JVS(1063)*X(118)-JVS(1064)*X(119)-JVS(1065)*X(120)-JVS(1066)*X(121)&
             &-JVS(1067)*X(122)-JVS(1068)*X(123)-JVS(1069)*X(124)-JVS(1070)*X(125)-JVS(1071)*X(126)-JVS(1072)*X(127)&
             &-JVS(1073)*X(128)-JVS(1074)*X(129)-JVS(1075)*X(130)
  X(132) = X(132)-JVS(1100)*X(75)-JVS(1101)*X(79)-JVS(1102)*X(116)
  X(134) = X(134)-JVS(1121)*X(48)-JVS(1122)*X(50)-JVS(1123)*X(55)-JVS(1124)*X(80)-JVS(1125)*X(83)-JVS(1126)*X(96)&
             &-JVS(1127)*X(100)-JVS(1128)*X(103)-JVS(1129)*X(108)-JVS(1130)*X(110)-JVS(1131)*X(113)-JVS(1132)*X(115)&
             &-JVS(1133)*X(120)-JVS(1134)*X(121)-JVS(1135)*X(123)-JVS(1136)*X(124)-JVS(1137)*X(125)-JVS(1138)*X(127)&
             &-JVS(1139)*X(128)-JVS(1140)*X(129)-JVS(1141)*X(133)
  X(135) = X(135)-JVS(1159)*X(26)-JVS(1160)*X(59)-JVS(1161)*X(60)-JVS(1162)*X(61)-JVS(1163)*X(63)-JVS(1164)*X(65)&
             &-JVS(1165)*X(66)-JVS(1166)*X(67)-JVS(1167)*X(69)-JVS(1168)*X(84)-JVS(1169)*X(87)-JVS(1170)*X(88)-JVS(1171)&
             &*X(89)-JVS(1172)*X(99)-JVS(1173)*X(100)-JVS(1174)*X(103)-JVS(1175)*X(104)-JVS(1176)*X(109)-JVS(1177)*X(111)&
             &-JVS(1178)*X(114)-JVS(1179)*X(116)-JVS(1180)*X(117)-JVS(1181)*X(118)-JVS(1182)*X(120)-JVS(1183)*X(122)&
             &-JVS(1184)*X(123)-JVS(1185)*X(124)-JVS(1186)*X(125)-JVS(1187)*X(129)-JVS(1188)*X(130)-JVS(1189)*X(133)
  X(136) = X(136)-JVS(1210)*X(62)-JVS(1211)*X(92)-JVS(1212)*X(95)
  X(137) = X(137)-JVS(1224)*X(64)-JVS(1225)*X(72)-JVS(1226)*X(73)-JVS(1227)*X(93)-JVS(1228)*X(129)
  X(138) = X(138)-JVS(1239)*X(78)-JVS(1240)*X(95)-JVS(1241)*X(101)-JVS(1242)*X(106)-JVS(1243)*X(133)
  X(139) = X(139)-JVS(1252)*X(55)-JVS(1253)*X(59)-JVS(1254)*X(62)-JVS(1255)*X(69)-JVS(1256)*X(71)-JVS(1257)*X(79)&
             &-JVS(1258)*X(81)-JVS(1259)*X(87)-JVS(1260)*X(88)-JVS(1261)*X(90)-JVS(1262)*X(92)-JVS(1263)*X(95)-JVS(1264)&
             &*X(104)-JVS(1265)*X(109)-JVS(1266)*X(110)-JVS(1267)*X(111)-JVS(1268)*X(114)-JVS(1269)*X(115)-JVS(1270)*X(118)&
             &-JVS(1271)*X(119)-JVS(1272)*X(120)-JVS(1273)*X(129)-JVS(1274)*X(130)-JVS(1275)*X(132)-JVS(1276)*X(133)&
             &-JVS(1277)*X(136)-JVS(1278)*X(137)-JVS(1279)*X(138)
  X(140) = X(140)-JVS(1296)*X(38)-JVS(1297)*X(58)-JVS(1298)*X(86)-JVS(1299)*X(87)-JVS(1300)*X(121)-JVS(1301)*X(129)&
             &-JVS(1302)*X(130)-JVS(1303)*X(137)-JVS(1304)*X(138)
  X(141) = X(141)-JVS(1315)*X(64)-JVS(1316)*X(72)-JVS(1317)*X(73)-JVS(1318)*X(95)
  X(142) = X(142)-JVS(1327)*X(64)-JVS(1328)*X(72)-JVS(1329)*X(73)-JVS(1330)*X(77)-JVS(1331)*X(95)-JVS(1332)*X(138)&
             &-JVS(1333)*X(141)
  X(143) = X(143)-JVS(1344)*X(78)-JVS(1345)*X(101)-JVS(1346)*X(106)-JVS(1347)*X(116)-JVS(1348)*X(120)-JVS(1349)*X(121)&
             &-JVS(1350)*X(125)-JVS(1351)*X(129)-JVS(1352)*X(133)-JVS(1353)*X(138)-JVS(1354)*X(140)-JVS(1355)*X(141)
  X(144) = X(144)-JVS(1367)*X(44)-JVS(1368)*X(56)-JVS(1369)*X(57)-JVS(1370)*X(58)-JVS(1371)*X(74)-JVS(1372)*X(78)&
             &-JVS(1373)*X(85)-JVS(1374)*X(86)-JVS(1375)*X(87)-JVS(1376)*X(98)-JVS(1377)*X(101)-JVS(1378)*X(106)-JVS(1379)&
             &*X(107)-JVS(1380)*X(110)-JVS(1381)*X(111)-JVS(1382)*X(113)-JVS(1383)*X(116)-JVS(1384)*X(118)-JVS(1385)*X(119)&
             &-JVS(1386)*X(120)-JVS(1387)*X(121)-JVS(1388)*X(122)-JVS(1389)*X(129)-JVS(1390)*X(130)-JVS(1391)*X(132)&
             &-JVS(1392)*X(133)-JVS(1393)*X(136)-JVS(1394)*X(137)-JVS(1395)*X(138)-JVS(1396)*X(140)-JVS(1397)*X(141)&
             &-JVS(1398)*X(142)-JVS(1399)*X(143)
  X(145) = X(145)-JVS(1412)*X(65)-JVS(1413)*X(70)-JVS(1414)*X(71)-JVS(1415)*X(78)-JVS(1416)*X(101)-JVS(1417)*X(106)&
             &-JVS(1418)*X(119)-JVS(1419)*X(120)-JVS(1420)*X(122)-JVS(1421)*X(130)-JVS(1422)*X(132)-JVS(1423)*X(133)&
             &-JVS(1424)*X(136)-JVS(1425)*X(137)-JVS(1426)*X(138)-JVS(1427)*X(140)-JVS(1428)*X(141)-JVS(1429)*X(142)&
             &-JVS(1430)*X(143)
  X(146) = X(146)-JVS(1442)*X(33)-JVS(1443)*X(51)-JVS(1444)*X(61)-JVS(1445)*X(67)-JVS(1446)*X(77)-JVS(1447)*X(81)&
             &-JVS(1448)*X(83)-JVS(1449)*X(84)-JVS(1450)*X(86)-JVS(1451)*X(87)-JVS(1452)*X(88)-JVS(1453)*X(89)-JVS(1454)&
             &*X(92)-JVS(1455)*X(94)-JVS(1456)*X(95)-JVS(1457)*X(96)-JVS(1458)*X(98)-JVS(1459)*X(100)-JVS(1460)*X(101)&
             &-JVS(1461)*X(103)-JVS(1462)*X(104)-JVS(1463)*X(106)-JVS(1464)*X(107)-JVS(1465)*X(108)-JVS(1466)*X(109)&
             &-JVS(1467)*X(110)-JVS(1468)*X(111)-JVS(1469)*X(113)-JVS(1470)*X(114)-JVS(1471)*X(115)-JVS(1472)*X(116)&
             &-JVS(1473)*X(118)-JVS(1474)*X(119)-JVS(1475)*X(120)-JVS(1476)*X(121)-JVS(1477)*X(122)-JVS(1478)*X(123)&
             &-JVS(1479)*X(124)-JVS(1480)*X(125)-JVS(1481)*X(127)-JVS(1482)*X(128)-JVS(1483)*X(129)-JVS(1484)*X(130)&
             &-JVS(1485)*X(132)-JVS(1486)*X(133)-JVS(1487)*X(136)-JVS(1488)*X(137)-JVS(1489)*X(138)-JVS(1490)*X(140)&
             &-JVS(1491)*X(141)-JVS(1492)*X(142)-JVS(1493)*X(143)-JVS(1494)*X(144)-JVS(1495)*X(145)
  X(147) = X(147)-JVS(1506)*X(57)-JVS(1507)*X(59)-JVS(1508)*X(61)-JVS(1509)*X(62)-JVS(1510)*X(63)-JVS(1511)*X(69)&
             &-JVS(1512)*X(71)-JVS(1513)*X(76)-JVS(1514)*X(77)-JVS(1515)*X(79)-JVS(1516)*X(81)-JVS(1517)*X(82)-JVS(1518)&
             &*X(83)-JVS(1519)*X(84)-JVS(1520)*X(89)-JVS(1521)*X(90)-JVS(1522)*X(92)-JVS(1523)*X(93)-JVS(1524)*X(94)&
             &-JVS(1525)*X(95)-JVS(1526)*X(96)-JVS(1527)*X(104)-JVS(1528)*X(107)-JVS(1529)*X(111)-JVS(1530)*X(112)-JVS(1531)&
             &*X(114)-JVS(1532)*X(115)-JVS(1533)*X(116)-JVS(1534)*X(117)-JVS(1535)*X(118)-JVS(1536)*X(122)-JVS(1537)*X(124)&
             &-JVS(1538)*X(125)-JVS(1539)*X(126)-JVS(1540)*X(129)-JVS(1541)*X(130)-JVS(1542)*X(131)-JVS(1543)*X(132)&
             &-JVS(1544)*X(133)-JVS(1545)*X(134)-JVS(1546)*X(135)-JVS(1547)*X(136)-JVS(1548)*X(137)-JVS(1549)*X(138)&
             &-JVS(1550)*X(139)-JVS(1551)*X(140)-JVS(1552)*X(141)-JVS(1553)*X(142)-JVS(1554)*X(143)-JVS(1555)*X(144)&
             &-JVS(1556)*X(145)-JVS(1557)*X(146)
  X(148) = X(148)-JVS(1567)*X(24)-JVS(1568)*X(25)-JVS(1569)*X(26)-JVS(1570)*X(30)-JVS(1571)*X(31)-JVS(1572)*X(32)&
             &-JVS(1573)*X(33)-JVS(1574)*X(34)-JVS(1575)*X(35)-JVS(1576)*X(36)-JVS(1577)*X(37)-JVS(1578)*X(38)-JVS(1579)&
             &*X(39)-JVS(1580)*X(40)-JVS(1581)*X(43)-JVS(1582)*X(44)-JVS(1583)*X(45)-JVS(1584)*X(46)-JVS(1585)*X(47)&
             &-JVS(1586)*X(48)-JVS(1587)*X(50)-JVS(1588)*X(52)-JVS(1589)*X(53)-JVS(1590)*X(54)-JVS(1591)*X(55)-JVS(1592)&
             &*X(56)-JVS(1593)*X(57)-JVS(1594)*X(58)-JVS(1595)*X(59)-JVS(1596)*X(60)-JVS(1597)*X(61)-JVS(1598)*X(62)&
             &-JVS(1599)*X(63)-JVS(1600)*X(64)-JVS(1601)*X(65)-JVS(1602)*X(67)-JVS(1603)*X(68)-JVS(1604)*X(69)-JVS(1605)&
             &*X(70)-JVS(1606)*X(71)-JVS(1607)*X(72)-JVS(1608)*X(73)-JVS(1609)*X(74)-JVS(1610)*X(75)-JVS(1611)*X(76)&
             &-JVS(1612)*X(77)-JVS(1613)*X(78)-JVS(1614)*X(79)-JVS(1615)*X(80)-JVS(1616)*X(81)-JVS(1617)*X(82)-JVS(1618)&
             &*X(83)-JVS(1619)*X(84)-JVS(1620)*X(85)-JVS(1621)*X(86)-JVS(1622)*X(87)-JVS(1623)*X(88)-JVS(1624)*X(89)&
             &-JVS(1625)*X(90)-JVS(1626)*X(91)-JVS(1627)*X(92)-JVS(1628)*X(93)-JVS(1629)*X(94)-JVS(1630)*X(95)-JVS(1631)&
             &*X(96)-JVS(1632)*X(97)-JVS(1633)*X(98)-JVS(1634)*X(99)-JVS(1635)*X(100)-JVS(1636)*X(101)-JVS(1637)*X(102)&
             &-JVS(1638)*X(103)-JVS(1639)*X(104)-JVS(1640)*X(105)-JVS(1641)*X(106)-JVS(1642)*X(107)-JVS(1643)*X(108)&
             &-JVS(1644)*X(109)-JVS(1645)*X(110)-JVS(1646)*X(111)-JVS(1647)*X(112)-JVS(1648)*X(113)-JVS(1649)*X(114)&
             &-JVS(1650)*X(115)-JVS(1651)*X(116)-JVS(1652)*X(117)-JVS(1653)*X(118)-JVS(1654)*X(119)-JVS(1655)*X(120)&
             &-JVS(1656)*X(121)-JVS(1657)*X(122)-JVS(1658)*X(123)-JVS(1659)*X(124)-JVS(1660)*X(125)-JVS(1661)*X(126)&
             &-JVS(1662)*X(127)-JVS(1663)*X(128)-JVS(1664)*X(129)-JVS(1665)*X(130)-JVS(1666)*X(131)-JVS(1667)*X(132)&
             &-JVS(1668)*X(133)-JVS(1669)*X(134)-JVS(1670)*X(135)-JVS(1671)*X(136)-JVS(1672)*X(137)-JVS(1673)*X(138)&
             &-JVS(1674)*X(139)-JVS(1675)*X(140)-JVS(1676)*X(141)-JVS(1677)*X(142)-JVS(1678)*X(143)-JVS(1679)*X(144)&
             &-JVS(1680)*X(145)-JVS(1681)*X(146)-JVS(1682)*X(147)
  X(149) = X(149)-JVS(1691)*X(51)-JVS(1692)*X(70)-JVS(1693)*X(79)-JVS(1694)*X(93)-JVS(1695)*X(95)-JVS(1696)*X(96)&
             &-JVS(1697)*X(115)-JVS(1698)*X(128)-JVS(1699)*X(129)-JVS(1700)*X(130)-JVS(1701)*X(132)-JVS(1702)*X(133)&
             &-JVS(1703)*X(137)-JVS(1704)*X(138)-JVS(1705)*X(141)-JVS(1706)*X(142)-JVS(1707)*X(144)-JVS(1708)*X(145)&
             &-JVS(1709)*X(146)-JVS(1710)*X(147)-JVS(1711)*X(148)
  X(150) = X(150)-JVS(1719)*X(64)-JVS(1720)*X(72)-JVS(1721)*X(73)-JVS(1722)*X(92)-JVS(1723)*X(95)-JVS(1724)*X(138)&
             &-JVS(1725)*X(141)-JVS(1726)*X(146)-JVS(1727)*X(147)-JVS(1728)*X(148)-JVS(1729)*X(149)
  X(151) = X(151)-JVS(1736)*X(27)-JVS(1737)*X(28)-JVS(1738)*X(29)-JVS(1739)*X(33)-JVS(1740)*X(41)-JVS(1741)*X(42)&
             &-JVS(1742)*X(46)-JVS(1743)*X(49)-JVS(1744)*X(51)-JVS(1745)*X(56)-JVS(1746)*X(57)-JVS(1747)*X(61)-JVS(1748)&
             &*X(67)-JVS(1749)*X(74)-JVS(1750)*X(76)-JVS(1751)*X(77)-JVS(1752)*X(78)-JVS(1753)*X(79)-JVS(1754)*X(81)&
             &-JVS(1755)*X(83)-JVS(1756)*X(84)-JVS(1757)*X(86)-JVS(1758)*X(87)-JVS(1759)*X(88)-JVS(1760)*X(89)-JVS(1761)&
             &*X(90)-JVS(1762)*X(92)-JVS(1763)*X(93)-JVS(1764)*X(94)-JVS(1765)*X(95)-JVS(1766)*X(96)-JVS(1767)*X(98)&
             &-JVS(1768)*X(99)-JVS(1769)*X(100)-JVS(1770)*X(101)-JVS(1771)*X(102)-JVS(1772)*X(103)-JVS(1773)*X(104)&
             &-JVS(1774)*X(106)-JVS(1775)*X(107)-JVS(1776)*X(108)-JVS(1777)*X(109)-JVS(1778)*X(110)-JVS(1779)*X(111)&
             &-JVS(1780)*X(113)-JVS(1781)*X(114)-JVS(1782)*X(115)-JVS(1783)*X(116)-JVS(1784)*X(117)-JVS(1785)*X(118)&
             &-JVS(1786)*X(119)-JVS(1787)*X(120)-JVS(1788)*X(121)-JVS(1789)*X(122)-JVS(1790)*X(123)-JVS(1791)*X(124)&
             &-JVS(1792)*X(125)-JVS(1793)*X(126)-JVS(1794)*X(127)-JVS(1795)*X(128)-JVS(1796)*X(129)-JVS(1797)*X(130)&
             &-JVS(1798)*X(131)-JVS(1799)*X(132)-JVS(1800)*X(133)-JVS(1801)*X(134)-JVS(1802)*X(135)-JVS(1803)*X(136)&
             &-JVS(1804)*X(137)-JVS(1805)*X(138)-JVS(1806)*X(139)-JVS(1807)*X(140)-JVS(1808)*X(141)-JVS(1809)*X(142)&
             &-JVS(1810)*X(143)-JVS(1811)*X(144)-JVS(1812)*X(145)-JVS(1813)*X(146)-JVS(1814)*X(147)-JVS(1815)*X(148)&
             &-JVS(1816)*X(149)-JVS(1817)*X(150)
  X(152) = X(152)-JVS(1823)*X(40)-JVS(1824)*X(49)-JVS(1825)*X(52)-JVS(1826)*X(53)-JVS(1827)*X(59)-JVS(1828)*X(60)&
             &-JVS(1829)*X(63)-JVS(1830)*X(65)-JVS(1831)*X(66)-JVS(1832)*X(75)-JVS(1833)*X(79)-JVS(1834)*X(82)-JVS(1835)&
             &*X(89)-JVS(1836)*X(90)-JVS(1837)*X(91)-JVS(1838)*X(95)-JVS(1839)*X(98)-JVS(1840)*X(99)-JVS(1841)*X(100)&
             &-JVS(1842)*X(103)-JVS(1843)*X(104)-JVS(1844)*X(107)-JVS(1845)*X(108)-JVS(1846)*X(109)-JVS(1847)*X(110)&
             &-JVS(1848)*X(111)-JVS(1849)*X(113)-JVS(1850)*X(115)-JVS(1851)*X(116)-JVS(1852)*X(118)-JVS(1853)*X(119)&
             &-JVS(1854)*X(120)-JVS(1855)*X(121)-JVS(1856)*X(122)-JVS(1857)*X(123)-JVS(1858)*X(124)-JVS(1859)*X(125)&
             &-JVS(1860)*X(127)-JVS(1861)*X(128)-JVS(1862)*X(129)-JVS(1863)*X(130)-JVS(1864)*X(132)-JVS(1865)*X(133)&
             &-JVS(1866)*X(134)-JVS(1867)*X(135)-JVS(1868)*X(136)-JVS(1869)*X(137)-JVS(1870)*X(138)-JVS(1871)*X(139)&
             &-JVS(1872)*X(140)-JVS(1873)*X(141)-JVS(1874)*X(142)-JVS(1875)*X(143)-JVS(1876)*X(144)-JVS(1877)*X(145)&
             &-JVS(1878)*X(146)-JVS(1879)*X(147)-JVS(1880)*X(148)-JVS(1881)*X(149)-JVS(1882)*X(150)-JVS(1883)*X(151)
  X(153) = X(153)-JVS(1888)*X(35)-JVS(1889)*X(40)-JVS(1890)*X(42)-JVS(1891)*X(43)-JVS(1892)*X(49)-JVS(1893)*X(82)&
             &-JVS(1894)*X(89)-JVS(1895)*X(90)-JVS(1896)*X(95)-JVS(1897)*X(96)-JVS(1898)*X(97)-JVS(1899)*X(98)-JVS(1900)&
             &*X(100)-JVS(1901)*X(101)-JVS(1902)*X(103)-JVS(1903)*X(106)-JVS(1904)*X(107)-JVS(1905)*X(108)-JVS(1906)*X(109)&
             &-JVS(1907)*X(110)-JVS(1908)*X(113)-JVS(1909)*X(114)-JVS(1910)*X(115)-JVS(1911)*X(116)-JVS(1912)*X(117)&
             &-JVS(1913)*X(118)-JVS(1914)*X(119)-JVS(1915)*X(120)-JVS(1916)*X(121)-JVS(1917)*X(122)-JVS(1918)*X(123)&
             &-JVS(1919)*X(124)-JVS(1920)*X(125)-JVS(1921)*X(127)-JVS(1922)*X(128)-JVS(1923)*X(129)-JVS(1924)*X(130)&
             &-JVS(1925)*X(132)-JVS(1926)*X(133)-JVS(1927)*X(134)-JVS(1928)*X(136)-JVS(1929)*X(137)-JVS(1930)*X(138)&
             &-JVS(1931)*X(139)-JVS(1932)*X(140)-JVS(1933)*X(141)-JVS(1934)*X(142)-JVS(1935)*X(143)-JVS(1936)*X(144)&
             &-JVS(1937)*X(145)-JVS(1938)*X(146)-JVS(1939)*X(147)-JVS(1940)*X(148)-JVS(1941)*X(149)-JVS(1942)*X(150)&
             &-JVS(1943)*X(151)-JVS(1944)*X(152)
  X(154) = X(154)-JVS(1948)*X(27)-JVS(1949)*X(38)-JVS(1950)*X(39)-JVS(1951)*X(42)-JVS(1952)*X(46)-JVS(1953)*X(49)&
             &-JVS(1954)*X(51)-JVS(1955)*X(52)-JVS(1956)*X(53)-JVS(1957)*X(57)-JVS(1958)*X(77)-JVS(1959)*X(79)-JVS(1960)&
             &*X(81)-JVS(1961)*X(83)-JVS(1962)*X(84)-JVS(1963)*X(88)-JVS(1964)*X(89)-JVS(1965)*X(90)-JVS(1966)*X(91)&
             &-JVS(1967)*X(92)-JVS(1968)*X(94)-JVS(1969)*X(95)-JVS(1970)*X(96)-JVS(1971)*X(99)-JVS(1972)*X(100)-JVS(1973)&
             &*X(102)-JVS(1974)*X(103)-JVS(1975)*X(106)-JVS(1976)*X(108)-JVS(1977)*X(111)-JVS(1978)*X(114)-JVS(1979)*X(115)&
             &-JVS(1980)*X(118)-JVS(1981)*X(119)-JVS(1982)*X(122)-JVS(1983)*X(126)-JVS(1984)*X(129)-JVS(1985)*X(130)&
             &-JVS(1986)*X(131)-JVS(1987)*X(132)-JVS(1988)*X(133)-JVS(1989)*X(134)-JVS(1990)*X(135)-JVS(1991)*X(136)&
             &-JVS(1992)*X(137)-JVS(1993)*X(138)-JVS(1994)*X(139)-JVS(1995)*X(140)-JVS(1996)*X(141)-JVS(1997)*X(142)&
             &-JVS(1998)*X(143)-JVS(1999)*X(144)-JVS(2000)*X(145)-JVS(2001)*X(146)-JVS(2002)*X(147)-JVS(2003)*X(148)&
             &-JVS(2004)*X(149)-JVS(2005)*X(150)-JVS(2006)*X(151)-JVS(2007)*X(152)-JVS(2008)*X(153)
  X(155) = X(155)-JVS(2011)*X(30)-JVS(2012)*X(31)-JVS(2013)*X(32)-JVS(2014)*X(42)-JVS(2015)*X(43)-JVS(2016)*X(44)&
             &-JVS(2017)*X(45)-JVS(2018)*X(46)-JVS(2019)*X(47)-JVS(2020)*X(48)-JVS(2021)*X(50)-JVS(2022)*X(52)-JVS(2023)&
             &*X(53)-JVS(2024)*X(54)-JVS(2025)*X(55)-JVS(2026)*X(56)-JVS(2027)*X(57)-JVS(2028)*X(58)-JVS(2029)*X(59)&
             &-JVS(2030)*X(61)-JVS(2031)*X(62)-JVS(2032)*X(63)-JVS(2033)*X(64)-JVS(2034)*X(65)-JVS(2035)*X(66)-JVS(2036)&
             &*X(67)-JVS(2037)*X(68)-JVS(2038)*X(69)-JVS(2039)*X(70)-JVS(2040)*X(71)-JVS(2041)*X(72)-JVS(2042)*X(73)&
             &-JVS(2043)*X(74)-JVS(2044)*X(76)-JVS(2045)*X(77)-JVS(2046)*X(78)-JVS(2047)*X(80)-JVS(2048)*X(81)-JVS(2049)&
             &*X(83)-JVS(2050)*X(84)-JVS(2051)*X(85)-JVS(2052)*X(86)-JVS(2053)*X(87)-JVS(2054)*X(88)-JVS(2055)*X(89)&
             &-JVS(2056)*X(90)-JVS(2057)*X(91)-JVS(2058)*X(92)-JVS(2059)*X(93)-JVS(2060)*X(94)-JVS(2061)*X(95)-JVS(2062)&
             &*X(96)-JVS(2063)*X(98)-JVS(2064)*X(99)-JVS(2065)*X(100)-JVS(2066)*X(101)-JVS(2067)*X(103)-JVS(2068)*X(104)&
             &-JVS(2069)*X(105)-JVS(2070)*X(106)-JVS(2071)*X(107)-JVS(2072)*X(108)-JVS(2073)*X(109)-JVS(2074)*X(110)&
             &-JVS(2075)*X(111)-JVS(2076)*X(112)-JVS(2077)*X(113)-JVS(2078)*X(114)-JVS(2079)*X(115)-JVS(2080)*X(116)&
             &-JVS(2081)*X(118)-JVS(2082)*X(119)-JVS(2083)*X(120)-JVS(2084)*X(121)-JVS(2085)*X(122)-JVS(2086)*X(123)&
             &-JVS(2087)*X(124)-JVS(2088)*X(125)-JVS(2089)*X(126)-JVS(2090)*X(127)-JVS(2091)*X(128)-JVS(2092)*X(129)&
             &-JVS(2093)*X(130)-JVS(2094)*X(131)-JVS(2095)*X(132)-JVS(2096)*X(133)-JVS(2097)*X(134)-JVS(2098)*X(135)&
             &-JVS(2099)*X(136)-JVS(2100)*X(137)-JVS(2101)*X(138)-JVS(2102)*X(139)-JVS(2103)*X(140)-JVS(2104)*X(141)&
             &-JVS(2105)*X(142)-JVS(2106)*X(143)-JVS(2107)*X(144)-JVS(2108)*X(145)-JVS(2109)*X(146)-JVS(2110)*X(147)&
             &-JVS(2111)*X(148)-JVS(2112)*X(149)-JVS(2113)*X(150)-JVS(2114)*X(151)-JVS(2115)*X(152)-JVS(2116)*X(153)&
             &-JVS(2117)*X(154)
  X(155) = X(155)/JVS(2118)
  X(154) = (X(154)-JVS(2010)*X(155))/(JVS(2009))
  X(153) = (X(153)-JVS(1946)*X(154)-JVS(1947)*X(155))/(JVS(1945))
  X(152) = (X(152)-JVS(1885)*X(153)-JVS(1886)*X(154)-JVS(1887)*X(155))/(JVS(1884))
  X(151) = (X(151)-JVS(1819)*X(152)-JVS(1820)*X(153)-JVS(1821)*X(154)-JVS(1822)*X(155))/(JVS(1818))
  X(150) = (X(150)-JVS(1731)*X(151)-JVS(1732)*X(152)-JVS(1733)*X(153)-JVS(1734)*X(154)-JVS(1735)*X(155))/(JVS(1730))
  X(149) = (X(149)-JVS(1713)*X(150)-JVS(1714)*X(151)-JVS(1715)*X(152)-JVS(1716)*X(153)-JVS(1717)*X(154)-JVS(1718)&
             &*X(155))/(JVS(1712))
  X(148) = (X(148)-JVS(1684)*X(149)-JVS(1685)*X(150)-JVS(1686)*X(151)-JVS(1687)*X(152)-JVS(1688)*X(153)-JVS(1689)*X(154)&
             &-JVS(1690)*X(155))/(JVS(1683))
  X(147) = (X(147)-JVS(1559)*X(148)-JVS(1560)*X(149)-JVS(1561)*X(150)-JVS(1562)*X(151)-JVS(1563)*X(152)-JVS(1564)*X(153)&
             &-JVS(1565)*X(154)-JVS(1566)*X(155))/(JVS(1558))
  X(146) = (X(146)-JVS(1497)*X(147)-JVS(1498)*X(148)-JVS(1499)*X(149)-JVS(1500)*X(150)-JVS(1501)*X(151)-JVS(1502)*X(152)&
             &-JVS(1503)*X(153)-JVS(1504)*X(154)-JVS(1505)*X(155))/(JVS(1496))
  X(145) = (X(145)-JVS(1432)*X(146)-JVS(1433)*X(147)-JVS(1434)*X(148)-JVS(1435)*X(149)-JVS(1436)*X(150)-JVS(1437)*X(151)&
             &-JVS(1438)*X(152)-JVS(1439)*X(153)-JVS(1440)*X(154)-JVS(1441)*X(155))/(JVS(1431))
  X(144) = (X(144)-JVS(1401)*X(145)-JVS(1402)*X(146)-JVS(1403)*X(147)-JVS(1404)*X(148)-JVS(1405)*X(149)-JVS(1406)*X(150)&
             &-JVS(1407)*X(151)-JVS(1408)*X(152)-JVS(1409)*X(153)-JVS(1410)*X(154)-JVS(1411)*X(155))/(JVS(1400))
  X(143) = (X(143)-JVS(1357)*X(145)-JVS(1358)*X(146)-JVS(1359)*X(148)-JVS(1360)*X(149)-JVS(1361)*X(150)-JVS(1362)*X(151)&
             &-JVS(1363)*X(152)-JVS(1364)*X(153)-JVS(1365)*X(154)-JVS(1366)*X(155))/(JVS(1356))
  X(142) = (X(142)-JVS(1335)*X(146)-JVS(1336)*X(147)-JVS(1337)*X(148)-JVS(1338)*X(149)-JVS(1339)*X(151)-JVS(1340)*X(152)&
             &-JVS(1341)*X(153)-JVS(1342)*X(154)-JVS(1343)*X(155))/(JVS(1334))
  X(141) = (X(141)-JVS(1320)*X(146)-JVS(1321)*X(148)-JVS(1322)*X(149)-JVS(1323)*X(152)-JVS(1324)*X(153)-JVS(1325)*X(154)&
             &-JVS(1326)*X(155))/(JVS(1319))
  X(140) = (X(140)-JVS(1306)*X(141)-JVS(1307)*X(143)-JVS(1308)*X(146)-JVS(1309)*X(148)-JVS(1310)*X(149)-JVS(1311)*X(152)&
             &-JVS(1312)*X(153)-JVS(1313)*X(154)-JVS(1314)*X(155))/(JVS(1305))
  X(139) = (X(139)-JVS(1281)*X(140)-JVS(1282)*X(141)-JVS(1283)*X(142)-JVS(1284)*X(143)-JVS(1285)*X(145)-JVS(1286)*X(146)&
             &-JVS(1287)*X(147)-JVS(1288)*X(148)-JVS(1289)*X(149)-JVS(1290)*X(150)-JVS(1291)*X(151)-JVS(1292)*X(152)&
             &-JVS(1293)*X(153)-JVS(1294)*X(154)-JVS(1295)*X(155))/(JVS(1280))
  X(138) = (X(138)-JVS(1245)*X(146)-JVS(1246)*X(148)-JVS(1247)*X(149)-JVS(1248)*X(152)-JVS(1249)*X(153)-JVS(1250)*X(154)&
             &-JVS(1251)*X(155))/(JVS(1244))
  X(137) = (X(137)-JVS(1230)*X(138)-JVS(1231)*X(141)-JVS(1232)*X(146)-JVS(1233)*X(148)-JVS(1234)*X(149)-JVS(1235)*X(152)&
             &-JVS(1236)*X(153)-JVS(1237)*X(154)-JVS(1238)*X(155))/(JVS(1229))
  X(136) = (X(136)-JVS(1214)*X(146)-JVS(1215)*X(147)-JVS(1216)*X(148)-JVS(1217)*X(149)-JVS(1218)*X(150)-JVS(1219)*X(151)&
             &-JVS(1220)*X(152)-JVS(1221)*X(153)-JVS(1222)*X(154)-JVS(1223)*X(155))/(JVS(1213))
  X(135) = (X(135)-JVS(1191)*X(136)-JVS(1192)*X(137)-JVS(1193)*X(138)-JVS(1194)*X(139)-JVS(1195)*X(140)-JVS(1196)*X(141)&
             &-JVS(1197)*X(142)-JVS(1198)*X(143)-JVS(1199)*X(145)-JVS(1200)*X(146)-JVS(1201)*X(147)-JVS(1202)*X(148)&
             &-JVS(1203)*X(149)-JVS(1204)*X(150)-JVS(1205)*X(151)-JVS(1206)*X(152)-JVS(1207)*X(153)-JVS(1208)*X(154)&
             &-JVS(1209)*X(155))/(JVS(1190))
  X(134) = (X(134)-JVS(1143)*X(138)-JVS(1144)*X(140)-JVS(1145)*X(141)-JVS(1146)*X(142)-JVS(1147)*X(143)-JVS(1148)*X(144)&
             &-JVS(1149)*X(145)-JVS(1150)*X(146)-JVS(1151)*X(147)-JVS(1152)*X(148)-JVS(1153)*X(149)-JVS(1154)*X(151)&
             &-JVS(1155)*X(152)-JVS(1156)*X(153)-JVS(1157)*X(154)-JVS(1158)*X(155))/(JVS(1142))
  X(133) = (X(133)-JVS(1114)*X(138)-JVS(1115)*X(146)-JVS(1116)*X(148)-JVS(1117)*X(149)-JVS(1118)*X(152)-JVS(1119)*X(153)&
             &-JVS(1120)*X(154))/(JVS(1113))
  X(132) = (X(132)-JVS(1104)*X(146)-JVS(1105)*X(148)-JVS(1106)*X(149)-JVS(1107)*X(150)-JVS(1108)*X(151)-JVS(1109)*X(152)&
             &-JVS(1110)*X(153)-JVS(1111)*X(154)-JVS(1112)*X(155))/(JVS(1103))
  X(131) = (X(131)-JVS(1077)*X(132)-JVS(1078)*X(133)-JVS(1079)*X(134)-JVS(1080)*X(136)-JVS(1081)*X(137)-JVS(1082)*X(138)&
             &-JVS(1083)*X(139)-JVS(1084)*X(140)-JVS(1085)*X(141)-JVS(1086)*X(142)-JVS(1087)*X(143)-JVS(1088)*X(144)&
             &-JVS(1089)*X(145)-JVS(1090)*X(146)-JVS(1091)*X(147)-JVS(1092)*X(148)-JVS(1093)*X(149)-JVS(1094)*X(150)&
             &-JVS(1095)*X(151)-JVS(1096)*X(152)-JVS(1097)*X(153)-JVS(1098)*X(154)-JVS(1099)*X(155))/(JVS(1076))
  X(130) = (X(130)-JVS(1016)*X(137)-JVS(1017)*X(141)-JVS(1018)*X(146)-JVS(1019)*X(148)-JVS(1020)*X(152)-JVS(1021)*X(153)&
             &-JVS(1022)*X(155))/(JVS(1015))
  X(129) = (X(129)-JVS(1006)*X(138)-JVS(1007)*X(141)-JVS(1008)*X(146)-JVS(1009)*X(148)-JVS(1010)*X(149)-JVS(1011)&
             &*X(153))/(JVS(1005))
  X(128) = (X(128)-JVS(994)*X(133)-JVS(995)*X(142)-JVS(996)*X(144)-JVS(997)*X(145)-JVS(998)*X(146)-JVS(999)*X(148)&
             &-JVS(1000)*X(151)-JVS(1001)*X(152)-JVS(1002)*X(153)-JVS(1003)*X(154)-JVS(1004)*X(155))/(JVS(993))
  X(127) = (X(127)-JVS(978)*X(128)-JVS(979)*X(140)-JVS(980)*X(143)-JVS(981)*X(144)-JVS(982)*X(145)-JVS(983)*X(146)&
             &-JVS(984)*X(148)-JVS(985)*X(151)-JVS(986)*X(152)-JVS(987)*X(153)-JVS(988)*X(154)-JVS(989)*X(155))/(JVS(977))
  X(126) = (X(126)-JVS(954)*X(129)-JVS(955)*X(130)-JVS(956)*X(133)-JVS(957)*X(137)-JVS(958)*X(141)-JVS(959)*X(142)&
             &-JVS(960)*X(146)-JVS(961)*X(147)-JVS(962)*X(148)-JVS(963)*X(149)-JVS(964)*X(151)-JVS(965)*X(152)-JVS(966)&
             &*X(153)-JVS(967)*X(154)-JVS(968)*X(155))/(JVS(953))
  X(125) = (X(125)-JVS(928)*X(146)-JVS(929)*X(148)-JVS(930)*X(151)-JVS(931)*X(152)-JVS(932)*X(153)-JVS(933)*X(154)&
             &-JVS(934)*X(155))/(JVS(927))
  X(124) = (X(124)-JVS(915)*X(125)-JVS(916)*X(146)-JVS(917)*X(148)-JVS(918)*X(152)-JVS(919)*X(153)-JVS(920)*X(154)&
             &-JVS(921)*X(155))/(JVS(914))
  X(123) = (X(123)-JVS(900)*X(124)-JVS(901)*X(125)-JVS(902)*X(146)-JVS(903)*X(148)-JVS(904)*X(152)-JVS(905)*X(153)&
             &-JVS(906)*X(154)-JVS(907)*X(155))/(JVS(899))
  X(122) = (X(122)-JVS(887)*X(142)-JVS(888)*X(146)-JVS(889)*X(148)-JVS(890)*X(149)-JVS(891)*X(152)-JVS(892)*X(153)&
             &-JVS(893)*X(154)-JVS(894)*X(155))/(JVS(886))
  X(121) = (X(121)-JVS(875)*X(129)-JVS(876)*X(141)-JVS(877)*X(143)-JVS(878)*X(146)-JVS(879)*X(148)-JVS(880)*X(149)&
             &-JVS(881)*X(152)-JVS(882)*X(153)-JVS(883)*X(155))/(JVS(874))
  X(120) = (X(120)-JVS(864)*X(145)-JVS(865)*X(146)-JVS(866)*X(148)-JVS(867)*X(152)-JVS(868)*X(153)-JVS(869)*X(154)&
             &-JVS(870)*X(155))/(JVS(863))
  X(119) = (X(119)-JVS(855)*X(132)-JVS(856)*X(146)-JVS(857)*X(148)-JVS(858)*X(150)-JVS(859)*X(152)-JVS(860)*X(153)&
             &-JVS(861)*X(154)-JVS(862)*X(155))/(JVS(854))
  X(118) = (X(118)-JVS(846)*X(129)-JVS(847)*X(141)-JVS(848)*X(146)-JVS(849)*X(148)-JVS(850)*X(149)-JVS(851)*X(155))&
             &/(JVS(845))
  X(117) = (X(117)-JVS(828)*X(118)-JVS(829)*X(129)-JVS(830)*X(133)-JVS(831)*X(141)-JVS(832)*X(142)-JVS(833)*X(146)&
             &-JVS(834)*X(148)-JVS(835)*X(149)-JVS(836)*X(150)-JVS(837)*X(151)-JVS(838)*X(152)-JVS(839)*X(153)-JVS(840)&
             &*X(154)-JVS(841)*X(155))/(JVS(827))
  X(116) = (X(116)-JVS(813)*X(146)-JVS(814)*X(150)-JVS(815)*X(152)-JVS(816)*X(153)-JVS(817)*X(154)-JVS(818)*X(155))&
             &/(JVS(812))
  X(115) = (X(115)-JVS(806)*X(133)-JVS(807)*X(146)-JVS(808)*X(148)-JVS(809)*X(151)-JVS(810)*X(154)-JVS(811)*X(155))&
             &/(JVS(805))
  X(114) = (X(114)-JVS(797)*X(118)-JVS(798)*X(129)-JVS(799)*X(136)-JVS(800)*X(141)-JVS(801)*X(146)-JVS(802)*X(148)&
             &-JVS(803)*X(149)-JVS(804)*X(155))/(JVS(796))
  X(113) = (X(113)-JVS(786)*X(142)-JVS(787)*X(146)-JVS(788)*X(148)-JVS(789)*X(149)-JVS(790)*X(152)-JVS(791)*X(153)&
             &-JVS(792)*X(154)-JVS(793)*X(155))/(JVS(785))
  X(112) = (X(112)-JVS(768)*X(118)-JVS(769)*X(122)-JVS(770)*X(129)-JVS(771)*X(130)-JVS(772)*X(133)-JVS(773)*X(137)&
             &-JVS(774)*X(141)-JVS(775)*X(146)-JVS(776)*X(147)-JVS(777)*X(148)-JVS(778)*X(149)-JVS(779)*X(151)-JVS(780)&
             &*X(152)-JVS(781)*X(153)-JVS(782)*X(155))/(JVS(767))
  X(111) = (X(111)-JVS(754)*X(118)-JVS(755)*X(129)-JVS(756)*X(146)-JVS(757)*X(148)-JVS(758)*X(155))/(JVS(753))
  X(110) = (X(110)-JVS(744)*X(142)-JVS(745)*X(146)-JVS(746)*X(148)-JVS(747)*X(149)-JVS(748)*X(152)-JVS(749)*X(153)&
             &-JVS(750)*X(154)-JVS(751)*X(155))/(JVS(743))
  X(109) = (X(109)-JVS(733)*X(120)-JVS(734)*X(140)-JVS(735)*X(143)-JVS(736)*X(146)-JVS(737)*X(148)-JVS(738)*X(152)&
             &-JVS(739)*X(153)-JVS(740)*X(155))/(JVS(732))
  X(108) = (X(108)-JVS(723)*X(146)-JVS(724)*X(148)-JVS(725)*X(152)-JVS(726)*X(153)-JVS(727)*X(154)-JVS(728)*X(155))&
             &/(JVS(722))
  X(107) = (X(107)-JVS(714)*X(140)-JVS(715)*X(143)-JVS(716)*X(146)-JVS(717)*X(148)-JVS(718)*X(152)-JVS(719)*X(153)&
             &-JVS(720)*X(155))/(JVS(713))
  X(106) = (X(106)-JVS(706)*X(133)-JVS(707)*X(146)-JVS(708)*X(153)-JVS(709)*X(154)-JVS(710)*X(155))/(JVS(705))
  X(105) = (X(105)-JVS(682)*X(106)-JVS(683)*X(107)-JVS(684)*X(109)-JVS(685)*X(110)-JVS(686)*X(112)-JVS(687)*X(113)&
             &-JVS(688)*X(120)-JVS(689)*X(121)-JVS(690)*X(122)-JVS(691)*X(127)-JVS(692)*X(129)-JVS(693)*X(130)-JVS(694)&
             &*X(133)-JVS(695)*X(138)-JVS(696)*X(140)-JVS(697)*X(141)-JVS(698)*X(143)-JVS(699)*X(146)-JVS(700)*X(148)&
             &-JVS(701)*X(149)-JVS(702)*X(152)-JVS(703)*X(153)-JVS(704)*X(155))/(JVS(681))
  X(104) = (X(104)-JVS(673)*X(129)-JVS(674)*X(141)-JVS(675)*X(146)-JVS(676)*X(148)-JVS(677)*X(149)-JVS(678)*X(155))&
             &/(JVS(672))
  X(103) = (X(103)-JVS(660)*X(146)-JVS(661)*X(148)-JVS(662)*X(152)-JVS(663)*X(153)-JVS(664)*X(155))/(JVS(659))
  X(102) = (X(102)-JVS(636)*X(103)-JVS(637)*X(108)-JVS(638)*X(119)-JVS(639)*X(126)-JVS(640)*X(129)-JVS(641)*X(130)&
             &-JVS(642)*X(131)-JVS(643)*X(133)-JVS(644)*X(134)-JVS(645)*X(135)-JVS(646)*X(141)-JVS(647)*X(144)-JVS(648)&
             &*X(145)-JVS(649)*X(146)-JVS(650)*X(148)-JVS(651)*X(149)-JVS(652)*X(150)-JVS(653)*X(151)-JVS(654)*X(152)&
             &-JVS(655)*X(153)-JVS(656)*X(154)-JVS(657)*X(155))/(JVS(635))
  X(101) = (X(101)-JVS(620)*X(133)-JVS(621)*X(146)-JVS(622)*X(148)-JVS(623)*X(153)-JVS(624)*X(155))/(JVS(619))
  X(100) = (X(100)-JVS(614)*X(146)-JVS(615)*X(148)-JVS(616)*X(152)-JVS(617)*X(153)-JVS(618)*X(155))/(JVS(613))
  X(99) = (X(99)-JVS(604)*X(111)-JVS(605)*X(118)-JVS(606)*X(122)-JVS(607)*X(141)-JVS(608)*X(146)-JVS(609)*X(148)&
            &-JVS(610)*X(149)-JVS(611)*X(155))/(JVS(603))
  X(98) = (X(98)-JVS(595)*X(140)-JVS(596)*X(143)-JVS(597)*X(146)-JVS(598)*X(148)-JVS(599)*X(152)-JVS(600)*X(153)&
            &-JVS(601)*X(155))/(JVS(594))
  X(97) = (X(97)-JVS(561)*X(98)-JVS(562)*X(107)-JVS(563)*X(109)-JVS(564)*X(110)-JVS(565)*X(113)-JVS(566)*X(114)-JVS(567)&
            &*X(116)-JVS(568)*X(119)-JVS(569)*X(120)-JVS(570)*X(121)-JVS(571)*X(122)-JVS(572)*X(123)-JVS(573)*X(124)&
            &-JVS(574)*X(125)-JVS(575)*X(127)-JVS(576)*X(130)-JVS(577)*X(136)-JVS(578)*X(138)-JVS(579)*X(139)-JVS(580)&
            &*X(140)-JVS(581)*X(141)-JVS(582)*X(142)-JVS(583)*X(146)-JVS(584)*X(147)-JVS(585)*X(148)-JVS(586)*X(149)&
            &-JVS(587)*X(151)-JVS(588)*X(152)-JVS(589)*X(153)-JVS(590)*X(154)-JVS(591)*X(155))/(JVS(560))
  X(96) = (X(96)-JVS(552)*X(142)-JVS(553)*X(148)-JVS(554)*X(149)-JVS(555)*X(154))/(JVS(551))
  X(95) = (X(95)-JVS(547)*X(148)-JVS(548)*X(149)-JVS(549)*X(154))/(JVS(546))
  X(94) = (X(94)-JVS(538)*X(95)-JVS(539)*X(96)-JVS(540)*X(142)-JVS(541)*X(146)-JVS(542)*X(147)-JVS(543)*X(149)-JVS(544)&
            &*X(150)-JVS(545)*X(151))/(JVS(537))
  X(93) = (X(93)-JVS(533)*X(141)-JVS(534)*X(146)-JVS(535)*X(148)-JVS(536)*X(149))/(JVS(532))
  X(92) = (X(92)-JVS(527)*X(95)-JVS(528)*X(146)-JVS(529)*X(147)-JVS(530)*X(149)-JVS(531)*X(151))/(JVS(526))
  X(91) = (X(91)-JVS(518)*X(100)-JVS(519)*X(103)-JVS(520)*X(108)-JVS(521)*X(146)-JVS(522)*X(148)-JVS(523)*X(152)&
            &-JVS(524)*X(153)-JVS(525)*X(154))/(JVS(517))
  X(90) = (X(90)-JVS(512)*X(115)-JVS(513)*X(148)-JVS(514)*X(150)-JVS(515)*X(151)-JVS(516)*X(154))/(JVS(511))
  X(89) = (X(89)-JVS(505)*X(142)-JVS(506)*X(146)-JVS(507)*X(147)-JVS(508)*X(149)-JVS(509)*X(151))/(JVS(504))
  X(88) = (X(88)-JVS(499)*X(114)-JVS(500)*X(146)-JVS(501)*X(148)-JVS(502)*X(151)-JVS(503)*X(155))/(JVS(498))
  X(87) = (X(87)-JVS(493)*X(141)-JVS(494)*X(146)-JVS(495)*X(152)-JVS(496)*X(155))/(JVS(492))
  X(86) = (X(86)-JVS(486)*X(130)-JVS(487)*X(146)-JVS(488)*X(148)-JVS(489)*X(149)-JVS(490)*X(152)-JVS(491)*X(155))&
            &/(JVS(485))
  X(85) = (X(85)-JVS(470)*X(98)-JVS(471)*X(107)-JVS(472)*X(110)-JVS(473)*X(113)-JVS(474)*X(119)-JVS(475)*X(120)-JVS(476)&
            &*X(121)-JVS(477)*X(122)-JVS(478)*X(130)-JVS(479)*X(136)-JVS(480)*X(140)-JVS(481)*X(141)-JVS(482)*X(148)&
            &-JVS(483)*X(153))/(JVS(469))
  X(84) = (X(84)-JVS(463)*X(137)-JVS(464)*X(146)-JVS(465)*X(147)-JVS(466)*X(149)-JVS(467)*X(150)-JVS(468)*X(151))&
            &/(JVS(462))
  X(83) = (X(83)-JVS(457)*X(96)-JVS(458)*X(146)-JVS(459)*X(147)-JVS(460)*X(149)-JVS(461)*X(151))/(JVS(456))
  X(82) = (X(82)-JVS(448)*X(107)-JVS(449)*X(140)-JVS(450)*X(143)-JVS(451)*X(146)-JVS(452)*X(148)-JVS(453)*X(152)&
            &-JVS(454)*X(153)-JVS(455)*X(155))/(JVS(447))
  X(81) = (X(81)-JVS(441)*X(137)-JVS(442)*X(146)-JVS(443)*X(147)-JVS(444)*X(149)-JVS(445)*X(151))/(JVS(440))
  X(80) = (X(80)-JVS(431)*X(100)-JVS(432)*X(103)-JVS(433)*X(108)-JVS(434)*X(123)-JVS(435)*X(124)-JVS(436)*X(125)&
            &-JVS(437)*X(127)-JVS(438)*X(148)-JVS(439)*X(155))/(JVS(430))
  X(79) = (X(79)-JVS(426)*X(132)-JVS(427)*X(148)-JVS(428)*X(149)-JVS(429)*X(151))/(JVS(425))
  X(78) = (X(78)-JVS(420)*X(101)-JVS(421)*X(106)-JVS(422)*X(138)-JVS(423)*X(148)-JVS(424)*X(155))/(JVS(419))
  X(77) = (X(77)-JVS(414)*X(95)-JVS(415)*X(146)-JVS(416)*X(147)-JVS(417)*X(149)-JVS(418)*X(151))/(JVS(413))
  X(76) = (X(76)-JVS(407)*X(111)-JVS(408)*X(129)-JVS(409)*X(146)-JVS(410)*X(148)-JVS(411)*X(149)-JVS(412)*X(155))&
            &/(JVS(406))
  X(75) = (X(75)-JVS(400)*X(116)-JVS(401)*X(132)-JVS(402)*X(148)-JVS(403)*X(150)-JVS(404)*X(154)-JVS(405)*X(155))&
            &/(JVS(399))
  X(74) = (X(74)-JVS(395)*X(111)-JVS(396)*X(118)-JVS(397)*X(148)-JVS(398)*X(155))/(JVS(394))
  X(73) = (X(73)-JVS(391)*X(141)-JVS(392)*X(148)-JVS(393)*X(155))/(JVS(390))
  X(72) = (X(72)-JVS(387)*X(141)-JVS(388)*X(148)-JVS(389)*X(155))/(JVS(386))
  X(71) = (X(71)-JVS(381)*X(130)-JVS(382)*X(146)-JVS(383)*X(148)-JVS(384)*X(152)-JVS(385)*X(155))/(JVS(380))
  X(70) = (X(70)-JVS(374)*X(130)-JVS(375)*X(146)-JVS(376)*X(148)-JVS(377)*X(149)-JVS(378)*X(152))/(JVS(373))
  X(69) = (X(69)-JVS(370)*X(130)-JVS(371)*X(148)-JVS(372)*X(155))/(JVS(369))
  X(68) = (X(68)-JVS(357)*X(88)-JVS(358)*X(93)-JVS(359)*X(94)-JVS(360)*X(99)-JVS(361)*X(104)-JVS(362)*X(111)-JVS(363)&
            &*X(112)-JVS(364)*X(139)-JVS(365)*X(146)-JVS(366)*X(148)-JVS(367)*X(149)-JVS(368)*X(155))/(JVS(356))
  X(67) = (X(67)-JVS(352)*X(141)-JVS(353)*X(146)-JVS(354)*X(148)-JVS(355)*X(155))/(JVS(351))
  X(66) = (X(66)-JVS(347)*X(123)-JVS(348)*X(124)-JVS(349)*X(125))/(JVS(346))
  X(65) = (X(65)-JVS(343)*X(122)-JVS(344)*X(148)-JVS(345)*X(155))/(JVS(342))
  X(64) = (X(64)-JVS(339)*X(141)-JVS(340)*X(148)-JVS(341)*X(155))/(JVS(338))
  X(63) = (X(63)-JVS(334)*X(104)-JVS(335)*X(146)-JVS(336)*X(148)-JVS(337)*X(155))/(JVS(333))
  X(62) = (X(62)-JVS(329)*X(92)-JVS(330)*X(136)-JVS(331)*X(148)-JVS(332)*X(155))/(JVS(328))
  X(61) = (X(61)-JVS(325)*X(141)-JVS(326)*X(146)-JVS(327)*X(155))/(JVS(324))
  X(60) = (X(60)-JVS(320)*X(109)-JVS(321)*X(120)-JVS(322)*X(148)-JVS(323)*X(155))/(JVS(319))
  X(59) = (X(59)-JVS(317)*X(141)-JVS(318)*X(148))/(JVS(316))
  X(58) = (X(58)-JVS(311)*X(86)-JVS(312)*X(87)-JVS(313)*X(140)-JVS(314)*X(148)-JVS(315)*X(155))/(JVS(310))
  X(57) = (X(57)-JVS(308)*X(148)-JVS(309)*X(154))/(JVS(307))
  X(56) = (X(56)-JVS(303)*X(113)-JVS(304)*X(148)-JVS(305)*X(155))/(JVS(302))
  X(55) = (X(55)-JVS(299)*X(110)-JVS(300)*X(148)-JVS(301)*X(155))/(JVS(298))
  X(54) = (X(54)-JVS(289)*X(77)-JVS(290)*X(81)-JVS(291)*X(83)-JVS(292)*X(84)-JVS(293)*X(89)-JVS(294)*X(92)-JVS(295)&
            &*X(94)-JVS(296)*X(148)-JVS(297)*X(155))/(JVS(288))
  X(53) = (X(53)-JVS(286)*X(148)-JVS(287)*X(154))/(JVS(285))
  X(52) = (X(52)-JVS(280)*X(148)-JVS(281)*X(154))/(JVS(279))
  X(51) = (X(51)-JVS(274)*X(146)-JVS(275)*X(149)-JVS(276)*X(151)-JVS(277)*X(154))/(JVS(273))
  X(50) = (X(50)-JVS(268)*X(115)-JVS(269)*X(128)-JVS(270)*X(148)-JVS(271)*X(155))/(JVS(267))
  X(49) = (X(49)-JVS(263)*X(90)-JVS(264)*X(148)-JVS(265)*X(151)-JVS(266)*X(152))/(JVS(262))
  X(48) = (X(48)-JVS(257)*X(127)-JVS(258)*X(129)-JVS(259)*X(148)-JVS(260)*X(149)-JVS(261)*X(153))/(JVS(256))
  X(47) = (X(47)-JVS(250)*X(69)-JVS(251)*X(126)-JVS(252)*X(130)-JVS(253)*X(131)-JVS(254)*X(148)-JVS(255)*X(153))&
            &/(JVS(249))
  X(46) = (X(46)-JVS(246)*X(148)-JVS(247)*X(151)-JVS(248)*X(155))/(JVS(245))
  X(45) = (X(45)-JVS(242)*X(107)-JVS(243)*X(148)-JVS(244)*X(155))/(JVS(241))
  X(44) = (X(44)-JVS(238)*X(98)-JVS(239)*X(148)-JVS(240)*X(155))/(JVS(237))
  X(43) = (X(43)-JVS(234)*X(148)-JVS(235)*X(153)-JVS(236)*X(155))/(JVS(233))
  X(42) = (X(42)-JVS(231)*X(151)-JVS(232)*X(153))/(JVS(230))
  X(41) = (X(41)-JVS(225)*X(90)-JVS(226)*X(148)-JVS(227)*X(150)-JVS(228)*X(151)-JVS(229)*X(154))/(JVS(224))
  X(40) = (X(40)-JVS(221)*X(148)-JVS(222)*X(152)-JVS(223)*X(155))/(JVS(220))
  X(39) = (X(39)-JVS(218)*X(148)-JVS(219)*X(154))/(JVS(217))
  X(38) = (X(38)-JVS(215)*X(148)-JVS(216)*X(154))/(JVS(214))
  X(37) = (X(37)-JVS(210)*X(64)-JVS(211)*X(72)-JVS(212)*X(93)-JVS(213)*X(148))/(JVS(209))
  X(36) = (X(36)-JVS(205)*X(64)-JVS(206)*X(72)-JVS(207)*X(93)-JVS(208)*X(148))/(JVS(204))
  X(35) = (X(35)-JVS(201)*X(96)-JVS(202)*X(148)-JVS(203)*X(149))/(JVS(200))
  X(34) = (X(34)-JVS(197)*X(73)-JVS(198)*X(129)-JVS(199)*X(148))/(JVS(196))
  X(33) = (X(33)-JVS(194)*X(146)-JVS(195)*X(148))/(JVS(193))
  X(32) = (X(32)-JVS(192)*X(148))/(JVS(191))
  X(31) = (X(31)-JVS(190)*X(148))/(JVS(189))
  X(30) = (X(30)-JVS(188)*X(148))/(JVS(187))
  X(29) = (X(29)-JVS(185)*X(128)-JVS(186)*X(151))/(JVS(184))
  X(28) = (X(28)-JVS(182)*X(88)-JVS(183)*X(151))/(JVS(181))
  X(27) = (X(27)-JVS(179)*X(151)-JVS(180)*X(154))/(JVS(178))
  X(26) = (X(26)-JVS(177)*X(61))/(JVS(176))
  X(25) = (X(25)-JVS(175)*X(148))/(JVS(174))
  X(24) = (X(24)-JVS(173)*X(149))/(JVS(172))
  X(23) = (X(23)-JVS(160)*X(88)-JVS(161)*X(93)-JVS(162)*X(94)-JVS(163)*X(99)-JVS(164)*X(104)-JVS(165)*X(111)-JVS(166)&
            &*X(112)-JVS(167)*X(139)-JVS(168)*X(146)-JVS(169)*X(148)-JVS(170)*X(149)-JVS(171)*X(155))/(JVS(159))
  X(22) = (X(22)-JVS(133)*X(66)-JVS(134)*X(83)-JVS(135)*X(88)-JVS(136)*X(98)-JVS(137)*X(107)-JVS(138)*X(109)-JVS(139)&
            &*X(110)-JVS(140)*X(113)-JVS(141)*X(116)-JVS(142)*X(119)-JVS(143)*X(120)-JVS(144)*X(121)-JVS(145)*X(122)&
            &-JVS(146)*X(124)-JVS(147)*X(127)-JVS(148)*X(130)-JVS(149)*X(136)-JVS(150)*X(138)-JVS(151)*X(139)-JVS(152)&
            &*X(140)-JVS(153)*X(141)-JVS(154)*X(146)-JVS(155)*X(148)-JVS(156)*X(152)-JVS(157)*X(153)-JVS(158)*X(155))&
            &/(JVS(132))
  X(21) = (X(21)-JVS(130)*X(32)-JVS(131)*X(148))/(JVS(129))
  X(20) = (X(20)-JVS(127)*X(32)-JVS(128)*X(148))/(JVS(126))
  X(19) = (X(19)-JVS(121)*X(30)-JVS(122)*X(31)-JVS(123)*X(53)-JVS(124)*X(148)-JVS(125)*X(154))/(JVS(120))
  X(18) = (X(18)-JVS(113)*X(100)-JVS(114)*X(103)-JVS(115)*X(108)-JVS(116)*X(146)-JVS(117)*X(152)-JVS(118)*X(153)&
            &-JVS(119)*X(154))/(JVS(112))
  X(17) = (X(17)-JVS(100)*X(60)-JVS(101)*X(66)-JVS(102)*X(100)-JVS(103)*X(103)-JVS(104)*X(109)-JVS(105)*X(117)-JVS(106)&
            &*X(124)-JVS(107)*X(139)-JVS(108)*X(146)-JVS(109)*X(148)-JVS(110)*X(152)-JVS(111)*X(153))/(JVS(99))
  X(16) = (X(16)-JVS(97)*X(131)-JVS(98)*X(148))/(JVS(96))
  X(15) = (X(15)-JVS(85)*X(57)-JVS(86)*X(66)-JVS(87)*X(103)-JVS(88)*X(108)-JVS(89)*X(112)-JVS(90)*X(124)-JVS(91)*X(146)&
            &-JVS(92)*X(148)-JVS(93)*X(152)-JVS(94)*X(153)-JVS(95)*X(154))/(JVS(84))
  X(14) = (X(14)-JVS(82)*X(31)-JVS(83)*X(148))/(JVS(81))
  X(13) = (X(13)-JVS(79)*X(30)-JVS(80)*X(148))/(JVS(78))
  X(12) = (X(12)-JVS(76)*X(32)-JVS(77)*X(148))/(JVS(75))
  X(11) = (X(11)-JVS(71)*X(66)-JVS(72)*X(123)-JVS(73)*X(124)-JVS(74)*X(125))/(JVS(70))
  X(10) = (X(10)-JVS(68)*X(66)-JVS(69)*X(124))/(JVS(67))
  X(9) = (X(9)-JVS(60)*X(61)-JVS(61)*X(67)-JVS(62)*X(115)-JVS(63)*X(128)-JVS(64)*X(132)-JVS(65)*X(153)-JVS(66)*X(155))&
           &/(JVS(59))
  X(8) = (X(8)-JVS(57)*X(99)-JVS(58)*X(148))/(JVS(56))
  X(7) = (X(7)-JVS(54)*X(95)-JVS(55)*X(154))/(JVS(53))
  X(6) = (X(6)-JVS(51)*X(95)-JVS(52)*X(148))/(JVS(50))
  X(5) = (X(5)-JVS(42)*X(101)-JVS(43)*X(106)-JVS(44)*X(115)-JVS(45)*X(146)-JVS(46)*X(151)-JVS(47)*X(153)-JVS(48)*X(154)&
           &-JVS(49)*X(155))/(JVS(41))
  X(4) = (X(4)-JVS(38)*X(111)-JVS(39)*X(118)-JVS(40)*X(146))/(JVS(37))
  X(3) = (X(3)-JVS(10)*X(57)-JVS(11)*X(59)-JVS(12)*X(62)-JVS(13)*X(68)-JVS(14)*X(70)-JVS(15)*X(76)-JVS(16)*X(86)-JVS(17)&
           &*X(88)-JVS(18)*X(90)-JVS(19)*X(93)-JVS(20)*X(97)-JVS(21)*X(104)-JVS(22)*X(112)-JVS(23)*X(116)-JVS(24)*X(119)&
           &-JVS(25)*X(129)-JVS(26)*X(132)-JVS(27)*X(139)-JVS(28)*X(141)-JVS(29)*X(146)-JVS(30)*X(147)-JVS(31)*X(148)&
           &-JVS(32)*X(149)-JVS(33)*X(152)-JVS(34)*X(153)-JVS(35)*X(154)-JVS(36)*X(155))/(JVS(9))
  X(2) = (X(2)-JVS(5)*X(64)-JVS(6)*X(72)-JVS(7)*X(73)-JVS(8)*X(148))/(JVS(4))
  X(1) = (X(1)-JVS(2)*X(90)-JVS(3)*X(148))/(JVS(1))
      
END SUBROUTINE KppSolve

! End of KppSolve function
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 
! KppSolveTR - sparse, transposed back substitution
!   Arguments :
!      JVS       - sparse Jacobian of variables
!      X         - Vector for variables
!      XX        - Vector for output variables
! 
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SUBROUTINE KppSolveTR ( JVS, X, XX )

! JVS - sparse Jacobian of variables
  REAL(kind=dp) :: JVS(LU_NONZERO)
! X - Vector for variables
  REAL(kind=dp) :: X(NVAR)
! XX - Vector for output variables
  REAL(kind=dp) :: XX(NVAR)

  XX(1) = X(1)/JVS(1)
  XX(2) = X(2)/JVS(4)
  XX(3) = X(3)/JVS(9)
  XX(4) = X(4)/JVS(37)
  XX(5) = X(5)/JVS(41)
  XX(6) = X(6)/JVS(50)
  XX(7) = X(7)/JVS(53)
  XX(8) = X(8)/JVS(56)
  XX(9) = X(9)/JVS(59)
  XX(10) = X(10)/JVS(67)
  XX(11) = X(11)/JVS(70)
  XX(12) = X(12)/JVS(75)
  XX(13) = X(13)/JVS(78)
  XX(14) = X(14)/JVS(81)
  XX(15) = X(15)/JVS(84)
  XX(16) = X(16)/JVS(96)
  XX(17) = X(17)/JVS(99)
  XX(18) = X(18)/JVS(112)
  XX(19) = X(19)/JVS(120)
  XX(20) = X(20)/JVS(126)
  XX(21) = X(21)/JVS(129)
  XX(22) = X(22)/JVS(132)
  XX(23) = X(23)/JVS(159)
  XX(24) = X(24)/JVS(172)
  XX(25) = X(25)/JVS(174)
  XX(26) = X(26)/JVS(176)
  XX(27) = X(27)/JVS(178)
  XX(28) = X(28)/JVS(181)
  XX(29) = X(29)/JVS(184)
  XX(30) = (X(30)-JVS(79)*XX(13)-JVS(121)*XX(19))/(JVS(187))
  XX(31) = (X(31)-JVS(82)*XX(14)-JVS(122)*XX(19))/(JVS(189))
  XX(32) = (X(32)-JVS(76)*XX(12)-JVS(127)*XX(20)-JVS(130)*XX(21))/(JVS(191))
  XX(33) = X(33)/JVS(193)
  XX(34) = X(34)/JVS(196)
  XX(35) = X(35)/JVS(200)
  XX(36) = X(36)/JVS(204)
  XX(37) = X(37)/JVS(209)
  XX(38) = X(38)/JVS(214)
  XX(39) = X(39)/JVS(217)
  XX(40) = X(40)/JVS(220)
  XX(41) = X(41)/JVS(224)
  XX(42) = X(42)/JVS(230)
  XX(43) = X(43)/JVS(233)
  XX(44) = X(44)/JVS(237)
  XX(45) = X(45)/JVS(241)
  XX(46) = X(46)/JVS(245)
  XX(47) = X(47)/JVS(249)
  XX(48) = X(48)/JVS(256)
  XX(49) = X(49)/JVS(262)
  XX(50) = X(50)/JVS(267)
  XX(51) = X(51)/JVS(273)
  XX(52) = X(52)/JVS(279)
  XX(53) = (X(53)-JVS(123)*XX(19))/(JVS(285))
  XX(54) = X(54)/JVS(288)
  XX(55) = X(55)/JVS(298)
  XX(56) = X(56)/JVS(302)
  XX(57) = (X(57)-JVS(10)*XX(3)-JVS(85)*XX(15))/(JVS(307))
  XX(58) = X(58)/JVS(310)
  XX(59) = (X(59)-JVS(11)*XX(3))/(JVS(316))
  XX(60) = (X(60)-JVS(100)*XX(17))/(JVS(319))
  XX(61) = (X(61)-JVS(60)*XX(9)-JVS(177)*XX(26))/(JVS(324))
  XX(62) = (X(62)-JVS(12)*XX(3))/(JVS(328))
  XX(63) = X(63)/JVS(333)
  XX(64) = (X(64)-JVS(5)*XX(2)-JVS(205)*XX(36)-JVS(210)*XX(37))/(JVS(338))
  XX(65) = X(65)/JVS(342)
  XX(66) = (X(66)-JVS(68)*XX(10)-JVS(71)*XX(11)-JVS(86)*XX(15)-JVS(101)*XX(17)-JVS(133)*XX(22))/(JVS(346))
  XX(67) = (X(67)-JVS(61)*XX(9))/(JVS(351))
  XX(68) = (X(68)-JVS(13)*XX(3))/(JVS(356))
  XX(69) = (X(69)-JVS(250)*XX(47))/(JVS(369))
  XX(70) = (X(70)-JVS(14)*XX(3))/(JVS(373))
  XX(71) = X(71)/JVS(380)
  XX(72) = (X(72)-JVS(6)*XX(2)-JVS(206)*XX(36)-JVS(211)*XX(37))/(JVS(386))
  XX(73) = (X(73)-JVS(7)*XX(2)-JVS(197)*XX(34))/(JVS(390))
  XX(74) = X(74)/JVS(394)
  XX(75) = X(75)/JVS(399)
  XX(76) = (X(76)-JVS(15)*XX(3))/(JVS(406))
  XX(77) = (X(77)-JVS(289)*XX(54))/(JVS(413))
  XX(78) = X(78)/JVS(419)
  XX(79) = X(79)/JVS(425)
  XX(80) = X(80)/JVS(430)
  XX(81) = (X(81)-JVS(290)*XX(54))/(JVS(440))
  XX(82) = X(82)/JVS(447)
  XX(83) = (X(83)-JVS(134)*XX(22)-JVS(291)*XX(54))/(JVS(456))
  XX(84) = (X(84)-JVS(292)*XX(54))/(JVS(462))
  XX(85) = X(85)/JVS(469)
  XX(86) = (X(86)-JVS(16)*XX(3)-JVS(311)*XX(58))/(JVS(485))
  XX(87) = (X(87)-JVS(312)*XX(58))/(JVS(492))
  XX(88) = (X(88)-JVS(17)*XX(3)-JVS(135)*XX(22)-JVS(160)*XX(23)-JVS(182)*XX(28)-JVS(357)*XX(68))/(JVS(498))
  XX(89) = (X(89)-JVS(293)*XX(54))/(JVS(504))
  XX(90) = (X(90)-JVS(2)*XX(1)-JVS(18)*XX(3)-JVS(225)*XX(41)-JVS(263)*XX(49))/(JVS(511))
  XX(91) = X(91)/JVS(517)
  XX(92) = (X(92)-JVS(294)*XX(54)-JVS(329)*XX(62))/(JVS(526))
  XX(93) = (X(93)-JVS(19)*XX(3)-JVS(161)*XX(23)-JVS(207)*XX(36)-JVS(212)*XX(37)-JVS(358)*XX(68))/(JVS(532))
  XX(94) = (X(94)-JVS(162)*XX(23)-JVS(295)*XX(54)-JVS(359)*XX(68))/(JVS(537))
  XX(95) = (X(95)-JVS(51)*XX(6)-JVS(54)*XX(7)-JVS(414)*XX(77)-JVS(527)*XX(92)-JVS(538)*XX(94))/(JVS(546))
  XX(96) = (X(96)-JVS(201)*XX(35)-JVS(457)*XX(83)-JVS(539)*XX(94))/(JVS(551))
  XX(97) = (X(97)-JVS(20)*XX(3))/(JVS(560))
  XX(98) = (X(98)-JVS(136)*XX(22)-JVS(238)*XX(44)-JVS(470)*XX(85)-JVS(561)*XX(97))/(JVS(594))
  XX(99) = (X(99)-JVS(57)*XX(8)-JVS(163)*XX(23)-JVS(360)*XX(68))/(JVS(603))
  XX(100) = (X(100)-JVS(102)*XX(17)-JVS(113)*XX(18)-JVS(431)*XX(80)-JVS(518)*XX(91))/(JVS(613))
  XX(101) = (X(101)-JVS(42)*XX(5)-JVS(420)*XX(78))/(JVS(619))
  XX(102) = X(102)/JVS(635)
  XX(103) = (X(103)-JVS(87)*XX(15)-JVS(103)*XX(17)-JVS(114)*XX(18)-JVS(432)*XX(80)-JVS(519)*XX(91)-JVS(636)*XX(102))&
              &/(JVS(659))
  XX(104) = (X(104)-JVS(21)*XX(3)-JVS(164)*XX(23)-JVS(334)*XX(63)-JVS(361)*XX(68))/(JVS(672))
  XX(105) = X(105)/JVS(681)
  XX(106) = (X(106)-JVS(43)*XX(5)-JVS(421)*XX(78)-JVS(682)*XX(105))/(JVS(705))
  XX(107) = (X(107)-JVS(137)*XX(22)-JVS(242)*XX(45)-JVS(448)*XX(82)-JVS(471)*XX(85)-JVS(562)*XX(97)-JVS(683)*XX(105))&
              &/(JVS(713))
  XX(108) = (X(108)-JVS(88)*XX(15)-JVS(115)*XX(18)-JVS(433)*XX(80)-JVS(520)*XX(91)-JVS(637)*XX(102))/(JVS(722))
  XX(109) = (X(109)-JVS(104)*XX(17)-JVS(138)*XX(22)-JVS(320)*XX(60)-JVS(563)*XX(97)-JVS(684)*XX(105))/(JVS(732))
  XX(110) = (X(110)-JVS(139)*XX(22)-JVS(299)*XX(55)-JVS(472)*XX(85)-JVS(564)*XX(97)-JVS(685)*XX(105))/(JVS(743))
  XX(111) = (X(111)-JVS(38)*XX(4)-JVS(165)*XX(23)-JVS(362)*XX(68)-JVS(395)*XX(74)-JVS(407)*XX(76)-JVS(604)*XX(99))&
              &/(JVS(753))
  XX(112) = (X(112)-JVS(22)*XX(3)-JVS(89)*XX(15)-JVS(166)*XX(23)-JVS(363)*XX(68)-JVS(686)*XX(105))/(JVS(767))
  XX(113) = (X(113)-JVS(140)*XX(22)-JVS(303)*XX(56)-JVS(473)*XX(85)-JVS(565)*XX(97)-JVS(687)*XX(105))/(JVS(785))
  XX(114) = (X(114)-JVS(499)*XX(88)-JVS(566)*XX(97))/(JVS(796))
  XX(115) = (X(115)-JVS(44)*XX(5)-JVS(62)*XX(9)-JVS(268)*XX(50)-JVS(512)*XX(90))/(JVS(805))
  XX(116) = (X(116)-JVS(23)*XX(3)-JVS(141)*XX(22)-JVS(400)*XX(75)-JVS(567)*XX(97))/(JVS(812))
  XX(117) = (X(117)-JVS(105)*XX(17))/(JVS(827))
  XX(118) = (X(118)-JVS(39)*XX(4)-JVS(396)*XX(74)-JVS(605)*XX(99)-JVS(754)*XX(111)-JVS(768)*XX(112)-JVS(797)*XX(114)&
              &-JVS(828)*XX(117))/(JVS(845))
  XX(119) = (X(119)-JVS(24)*XX(3)-JVS(142)*XX(22)-JVS(474)*XX(85)-JVS(568)*XX(97)-JVS(638)*XX(102))/(JVS(854))
  XX(120) = (X(120)-JVS(143)*XX(22)-JVS(321)*XX(60)-JVS(475)*XX(85)-JVS(569)*XX(97)-JVS(688)*XX(105)-JVS(733)*XX(109))&
              &/(JVS(863))
  XX(121) = (X(121)-JVS(144)*XX(22)-JVS(476)*XX(85)-JVS(570)*XX(97)-JVS(689)*XX(105))/(JVS(874))
  XX(122) = (X(122)-JVS(145)*XX(22)-JVS(343)*XX(65)-JVS(477)*XX(85)-JVS(571)*XX(97)-JVS(606)*XX(99)-JVS(690)*XX(105)&
              &-JVS(769)*XX(112))/(JVS(886))
  XX(123) = (X(123)-JVS(72)*XX(11)-JVS(347)*XX(66)-JVS(434)*XX(80)-JVS(572)*XX(97))/(JVS(899))
  XX(124) = (X(124)-JVS(69)*XX(10)-JVS(73)*XX(11)-JVS(90)*XX(15)-JVS(106)*XX(17)-JVS(146)*XX(22)-JVS(348)*XX(66)&
              &-JVS(435)*XX(80)-JVS(573)*XX(97)-JVS(900)*XX(123))/(JVS(914))
  XX(125) = (X(125)-JVS(74)*XX(11)-JVS(349)*XX(66)-JVS(436)*XX(80)-JVS(574)*XX(97)-JVS(901)*XX(123)-JVS(915)*XX(124))&
              &/(JVS(927))
  XX(126) = (X(126)-JVS(251)*XX(47)-JVS(639)*XX(102))/(JVS(953))
  XX(127) = (X(127)-JVS(147)*XX(22)-JVS(257)*XX(48)-JVS(437)*XX(80)-JVS(575)*XX(97)-JVS(691)*XX(105))/(JVS(977))
  XX(128) = (X(128)-JVS(63)*XX(9)-JVS(185)*XX(29)-JVS(269)*XX(50)-JVS(978)*XX(127))/(JVS(993))
  XX(129) = (X(129)-JVS(25)*XX(3)-JVS(198)*XX(34)-JVS(258)*XX(48)-JVS(408)*XX(76)-JVS(640)*XX(102)-JVS(673)*XX(104)&
              &-JVS(692)*XX(105)-JVS(755)*XX(111)-JVS(770)*XX(112)-JVS(798)*XX(114)-JVS(829)*XX(117)-JVS(846)*XX(118)&
              &-JVS(875)*XX(121)-JVS(954)*XX(126))/(JVS(1005))
  XX(130) = (X(130)-JVS(148)*XX(22)-JVS(252)*XX(47)-JVS(370)*XX(69)-JVS(374)*XX(70)-JVS(381)*XX(71)-JVS(478)*XX(85)&
              &-JVS(486)*XX(86)-JVS(576)*XX(97)-JVS(641)*XX(102)-JVS(693)*XX(105)-JVS(771)*XX(112)-JVS(955)*XX(126))&
              &/(JVS(1015))
  XX(131) = (X(131)-JVS(97)*XX(16)-JVS(253)*XX(47)-JVS(642)*XX(102))/(JVS(1076))
  XX(132) = (X(132)-JVS(26)*XX(3)-JVS(64)*XX(9)-JVS(401)*XX(75)-JVS(426)*XX(79)-JVS(855)*XX(119)-JVS(1077)*XX(131))&
              &/(JVS(1103))
  XX(133) = (X(133)-JVS(620)*XX(101)-JVS(643)*XX(102)-JVS(694)*XX(105)-JVS(706)*XX(106)-JVS(772)*XX(112)-JVS(806)&
              &*XX(115)-JVS(830)*XX(117)-JVS(956)*XX(126)-JVS(994)*XX(128)-JVS(1078)*XX(131))/(JVS(1113))
  XX(134) = (X(134)-JVS(644)*XX(102)-JVS(1079)*XX(131))/(JVS(1142))
  XX(135) = (X(135)-JVS(645)*XX(102))/(JVS(1190))
  XX(136) = (X(136)-JVS(149)*XX(22)-JVS(330)*XX(62)-JVS(479)*XX(85)-JVS(577)*XX(97)-JVS(799)*XX(114)-JVS(1080)*XX(131)&
              &-JVS(1191)*XX(135))/(JVS(1213))
  XX(137) = (X(137)-JVS(441)*XX(81)-JVS(463)*XX(84)-JVS(773)*XX(112)-JVS(957)*XX(126)-JVS(1016)*XX(130)-JVS(1081)&
              &*XX(131)-JVS(1192)*XX(135))/(JVS(1229))
  XX(138) = (X(138)-JVS(150)*XX(22)-JVS(422)*XX(78)-JVS(578)*XX(97)-JVS(695)*XX(105)-JVS(1006)*XX(129)-JVS(1082)*XX(131)&
              &-JVS(1114)*XX(133)-JVS(1143)*XX(134)-JVS(1193)*XX(135)-JVS(1230)*XX(137))/(JVS(1244))
  XX(139) = (X(139)-JVS(27)*XX(3)-JVS(107)*XX(17)-JVS(151)*XX(22)-JVS(167)*XX(23)-JVS(364)*XX(68)-JVS(579)*XX(97)&
              &-JVS(1083)*XX(131)-JVS(1194)*XX(135))/(JVS(1280))
  XX(140) = (X(140)-JVS(152)*XX(22)-JVS(313)*XX(58)-JVS(449)*XX(82)-JVS(480)*XX(85)-JVS(580)*XX(97)-JVS(595)*XX(98)&
              &-JVS(696)*XX(105)-JVS(714)*XX(107)-JVS(734)*XX(109)-JVS(979)*XX(127)-JVS(1084)*XX(131)-JVS(1144)*XX(134)&
              &-JVS(1195)*XX(135)-JVS(1281)*XX(139))/(JVS(1305))
  XX(141) = (X(141)-JVS(28)*XX(3)-JVS(153)*XX(22)-JVS(317)*XX(59)-JVS(325)*XX(61)-JVS(339)*XX(64)-JVS(352)*XX(67)&
              &-JVS(387)*XX(72)-JVS(391)*XX(73)-JVS(481)*XX(85)-JVS(493)*XX(87)-JVS(533)*XX(93)-JVS(581)*XX(97)-JVS(607)&
              &*XX(99)-JVS(646)*XX(102)-JVS(674)*XX(104)-JVS(697)*XX(105)-JVS(774)*XX(112)-JVS(800)*XX(114)-JVS(831)*XX(117)&
              &-JVS(847)*XX(118)-JVS(876)*XX(121)-JVS(958)*XX(126)-JVS(1007)*XX(129)-JVS(1017)*XX(130)-JVS(1085)*XX(131)&
              &-JVS(1145)*XX(134)-JVS(1196)*XX(135)-JVS(1231)*XX(137)-JVS(1282)*XX(139)-JVS(1306)*XX(140))/(JVS(1319))
  XX(142) = (X(142)-JVS(505)*XX(89)-JVS(540)*XX(94)-JVS(552)*XX(96)-JVS(582)*XX(97)-JVS(744)*XX(110)-JVS(786)*XX(113)&
              &-JVS(832)*XX(117)-JVS(887)*XX(122)-JVS(959)*XX(126)-JVS(995)*XX(128)-JVS(1086)*XX(131)-JVS(1146)*XX(134)&
              &-JVS(1197)*XX(135)-JVS(1283)*XX(139))/(JVS(1334))
  XX(143) = (X(143)-JVS(450)*XX(82)-JVS(596)*XX(98)-JVS(698)*XX(105)-JVS(715)*XX(107)-JVS(735)*XX(109)-JVS(877)*XX(121)&
              &-JVS(980)*XX(127)-JVS(1087)*XX(131)-JVS(1147)*XX(134)-JVS(1198)*XX(135)-JVS(1284)*XX(139)-JVS(1307)*XX(140))&
              &/(JVS(1356))
  XX(144) = (X(144)-JVS(647)*XX(102)-JVS(981)*XX(127)-JVS(996)*XX(128)-JVS(1088)*XX(131)-JVS(1148)*XX(134))/(JVS(1400))
  XX(145) = (X(145)-JVS(648)*XX(102)-JVS(864)*XX(120)-JVS(982)*XX(127)-JVS(997)*XX(128)-JVS(1089)*XX(131)-JVS(1149)&
              &*XX(134)-JVS(1199)*XX(135)-JVS(1285)*XX(139)-JVS(1357)*XX(143)-JVS(1401)*XX(144))/(JVS(1431))
  XX(146) = (X(146)-JVS(29)*XX(3)-JVS(40)*XX(4)-JVS(45)*XX(5)-JVS(91)*XX(15)-JVS(108)*XX(17)-JVS(116)*XX(18)-JVS(154)&
              &*XX(22)-JVS(168)*XX(23)-JVS(194)*XX(33)-JVS(274)*XX(51)-JVS(326)*XX(61)-JVS(335)*XX(63)-JVS(353)*XX(67)&
              &-JVS(365)*XX(68)-JVS(375)*XX(70)-JVS(382)*XX(71)-JVS(409)*XX(76)-JVS(415)*XX(77)-JVS(442)*XX(81)-JVS(451)&
              &*XX(82)-JVS(458)*XX(83)-JVS(464)*XX(84)-JVS(487)*XX(86)-JVS(494)*XX(87)-JVS(500)*XX(88)-JVS(506)*XX(89)&
              &-JVS(521)*XX(91)-JVS(528)*XX(92)-JVS(534)*XX(93)-JVS(541)*XX(94)-JVS(583)*XX(97)-JVS(597)*XX(98)-JVS(608)&
              &*XX(99)-JVS(614)*XX(100)-JVS(621)*XX(101)-JVS(649)*XX(102)-JVS(660)*XX(103)-JVS(675)*XX(104)-JVS(699)*XX(105)&
              &-JVS(707)*XX(106)-JVS(716)*XX(107)-JVS(723)*XX(108)-JVS(736)*XX(109)-JVS(745)*XX(110)-JVS(756)*XX(111)&
              &-JVS(775)*XX(112)-JVS(787)*XX(113)-JVS(801)*XX(114)-JVS(807)*XX(115)-JVS(813)*XX(116)-JVS(833)*XX(117)&
              &-JVS(848)*XX(118)-JVS(856)*XX(119)-JVS(865)*XX(120)-JVS(878)*XX(121)-JVS(888)*XX(122)-JVS(902)*XX(123)&
              &-JVS(916)*XX(124)-JVS(928)*XX(125)-JVS(960)*XX(126)-JVS(983)*XX(127)-JVS(998)*XX(128)-JVS(1008)*XX(129)&
              &-JVS(1018)*XX(130)-JVS(1090)*XX(131)-JVS(1104)*XX(132)-JVS(1115)*XX(133)-JVS(1150)*XX(134)-JVS(1200)*XX(135)&
              &-JVS(1214)*XX(136)-JVS(1232)*XX(137)-JVS(1245)*XX(138)-JVS(1286)*XX(139)-JVS(1308)*XX(140)-JVS(1320)*XX(141)&
              &-JVS(1335)*XX(142)-JVS(1358)*XX(143)-JVS(1402)*XX(144)-JVS(1432)*XX(145))/(JVS(1496))
  XX(147) = (X(147)-JVS(30)*XX(3)-JVS(416)*XX(77)-JVS(443)*XX(81)-JVS(459)*XX(83)-JVS(465)*XX(84)-JVS(507)*XX(89)&
              &-JVS(529)*XX(92)-JVS(542)*XX(94)-JVS(584)*XX(97)-JVS(776)*XX(112)-JVS(961)*XX(126)-JVS(1091)*XX(131)&
              &-JVS(1151)*XX(134)-JVS(1201)*XX(135)-JVS(1215)*XX(136)-JVS(1287)*XX(139)-JVS(1336)*XX(142)-JVS(1403)*XX(144)&
              &-JVS(1433)*XX(145)-JVS(1497)*XX(146))/(JVS(1558))
  XX(148) = (X(148)-JVS(3)*XX(1)-JVS(8)*XX(2)-JVS(31)*XX(3)-JVS(52)*XX(6)-JVS(58)*XX(8)-JVS(77)*XX(12)-JVS(80)*XX(13)&
              &-JVS(83)*XX(14)-JVS(92)*XX(15)-JVS(98)*XX(16)-JVS(109)*XX(17)-JVS(124)*XX(19)-JVS(128)*XX(20)-JVS(131)*XX(21)&
              &-JVS(155)*XX(22)-JVS(169)*XX(23)-JVS(175)*XX(25)-JVS(188)*XX(30)-JVS(190)*XX(31)-JVS(192)*XX(32)-JVS(195)&
              &*XX(33)-JVS(199)*XX(34)-JVS(202)*XX(35)-JVS(208)*XX(36)-JVS(213)*XX(37)-JVS(215)*XX(38)-JVS(218)*XX(39)&
              &-JVS(221)*XX(40)-JVS(226)*XX(41)-JVS(234)*XX(43)-JVS(239)*XX(44)-JVS(243)*XX(45)-JVS(246)*XX(46)-JVS(254)&
              &*XX(47)-JVS(259)*XX(48)-JVS(264)*XX(49)-JVS(270)*XX(50)-JVS(280)*XX(52)-JVS(286)*XX(53)-JVS(296)*XX(54)&
              &-JVS(300)*XX(55)-JVS(304)*XX(56)-JVS(308)*XX(57)-JVS(314)*XX(58)-JVS(318)*XX(59)-JVS(322)*XX(60)-JVS(331)&
              &*XX(62)-JVS(336)*XX(63)-JVS(340)*XX(64)-JVS(344)*XX(65)-JVS(354)*XX(67)-JVS(366)*XX(68)-JVS(371)*XX(69)&
              &-JVS(376)*XX(70)-JVS(383)*XX(71)-JVS(388)*XX(72)-JVS(392)*XX(73)-JVS(397)*XX(74)-JVS(402)*XX(75)-JVS(410)&
              &*XX(76)-JVS(423)*XX(78)-JVS(427)*XX(79)-JVS(438)*XX(80)-JVS(452)*XX(82)-JVS(482)*XX(85)-JVS(488)*XX(86)&
              &-JVS(501)*XX(88)-JVS(513)*XX(90)-JVS(522)*XX(91)-JVS(535)*XX(93)-JVS(547)*XX(95)-JVS(553)*XX(96)-JVS(585)&
              &*XX(97)-JVS(598)*XX(98)-JVS(609)*XX(99)-JVS(615)*XX(100)-JVS(622)*XX(101)-JVS(650)*XX(102)-JVS(661)*XX(103)&
              &-JVS(676)*XX(104)-JVS(700)*XX(105)-JVS(717)*XX(107)-JVS(724)*XX(108)-JVS(737)*XX(109)-JVS(746)*XX(110)&
              &-JVS(757)*XX(111)-JVS(777)*XX(112)-JVS(788)*XX(113)-JVS(802)*XX(114)-JVS(808)*XX(115)-JVS(834)*XX(117)&
              &-JVS(849)*XX(118)-JVS(857)*XX(119)-JVS(866)*XX(120)-JVS(879)*XX(121)-JVS(889)*XX(122)-JVS(903)*XX(123)&
              &-JVS(917)*XX(124)-JVS(929)*XX(125)-JVS(962)*XX(126)-JVS(984)*XX(127)-JVS(999)*XX(128)-JVS(1009)*XX(129)&
              &-JVS(1019)*XX(130)-JVS(1092)*XX(131)-JVS(1105)*XX(132)-JVS(1116)*XX(133)-JVS(1152)*XX(134)-JVS(1202)*XX(135)&
              &-JVS(1216)*XX(136)-JVS(1233)*XX(137)-JVS(1246)*XX(138)-JVS(1288)*XX(139)-JVS(1309)*XX(140)-JVS(1321)*XX(141)&
              &-JVS(1337)*XX(142)-JVS(1359)*XX(143)-JVS(1404)*XX(144)-JVS(1434)*XX(145)-JVS(1498)*XX(146)-JVS(1559)*XX(147))&
              &/(JVS(1683))
  XX(149) = (X(149)-JVS(32)*XX(3)-JVS(170)*XX(23)-JVS(173)*XX(24)-JVS(203)*XX(35)-JVS(260)*XX(48)-JVS(275)*XX(51)&
              &-JVS(367)*XX(68)-JVS(377)*XX(70)-JVS(411)*XX(76)-JVS(417)*XX(77)-JVS(428)*XX(79)-JVS(444)*XX(81)-JVS(460)&
              &*XX(83)-JVS(466)*XX(84)-JVS(489)*XX(86)-JVS(508)*XX(89)-JVS(530)*XX(92)-JVS(536)*XX(93)-JVS(543)*XX(94)&
              &-JVS(548)*XX(95)-JVS(554)*XX(96)-JVS(586)*XX(97)-JVS(610)*XX(99)-JVS(651)*XX(102)-JVS(677)*XX(104)-JVS(701)&
              &*XX(105)-JVS(747)*XX(110)-JVS(778)*XX(112)-JVS(789)*XX(113)-JVS(803)*XX(114)-JVS(835)*XX(117)-JVS(850)&
              &*XX(118)-JVS(880)*XX(121)-JVS(890)*XX(122)-JVS(963)*XX(126)-JVS(1010)*XX(129)-JVS(1093)*XX(131)-JVS(1106)&
              &*XX(132)-JVS(1117)*XX(133)-JVS(1153)*XX(134)-JVS(1203)*XX(135)-JVS(1217)*XX(136)-JVS(1234)*XX(137)-JVS(1247)&
              &*XX(138)-JVS(1289)*XX(139)-JVS(1310)*XX(140)-JVS(1322)*XX(141)-JVS(1338)*XX(142)-JVS(1360)*XX(143)-JVS(1405)&
              &*XX(144)-JVS(1435)*XX(145)-JVS(1499)*XX(146)-JVS(1560)*XX(147)-JVS(1684)*XX(148))/(JVS(1712))
  XX(150) = (X(150)-JVS(227)*XX(41)-JVS(403)*XX(75)-JVS(467)*XX(84)-JVS(514)*XX(90)-JVS(544)*XX(94)-JVS(652)*XX(102)&
              &-JVS(814)*XX(116)-JVS(836)*XX(117)-JVS(858)*XX(119)-JVS(1094)*XX(131)-JVS(1107)*XX(132)-JVS(1204)*XX(135)&
              &-JVS(1218)*XX(136)-JVS(1290)*XX(139)-JVS(1361)*XX(143)-JVS(1406)*XX(144)-JVS(1436)*XX(145)-JVS(1500)*XX(146)&
              &-JVS(1561)*XX(147)-JVS(1685)*XX(148)-JVS(1713)*XX(149))/(JVS(1730))
  XX(151) = (X(151)-JVS(46)*XX(5)-JVS(179)*XX(27)-JVS(183)*XX(28)-JVS(186)*XX(29)-JVS(228)*XX(41)-JVS(231)*XX(42)&
              &-JVS(247)*XX(46)-JVS(265)*XX(49)-JVS(276)*XX(51)-JVS(418)*XX(77)-JVS(429)*XX(79)-JVS(445)*XX(81)-JVS(461)&
              &*XX(83)-JVS(468)*XX(84)-JVS(502)*XX(88)-JVS(509)*XX(89)-JVS(515)*XX(90)-JVS(531)*XX(92)-JVS(545)*XX(94)&
              &-JVS(587)*XX(97)-JVS(653)*XX(102)-JVS(779)*XX(112)-JVS(809)*XX(115)-JVS(837)*XX(117)-JVS(930)*XX(125)&
              &-JVS(964)*XX(126)-JVS(985)*XX(127)-JVS(1000)*XX(128)-JVS(1095)*XX(131)-JVS(1108)*XX(132)-JVS(1154)*XX(134)&
              &-JVS(1205)*XX(135)-JVS(1219)*XX(136)-JVS(1291)*XX(139)-JVS(1339)*XX(142)-JVS(1362)*XX(143)-JVS(1407)*XX(144)&
              &-JVS(1437)*XX(145)-JVS(1501)*XX(146)-JVS(1562)*XX(147)-JVS(1686)*XX(148)-JVS(1714)*XX(149)-JVS(1731)*XX(150))&
              &/(JVS(1818))
  XX(152) = (X(152)-JVS(33)*XX(3)-JVS(93)*XX(15)-JVS(110)*XX(17)-JVS(117)*XX(18)-JVS(156)*XX(22)-JVS(222)*XX(40)&
              &-JVS(266)*XX(49)-JVS(378)*XX(70)-JVS(384)*XX(71)-JVS(453)*XX(82)-JVS(490)*XX(86)-JVS(495)*XX(87)-JVS(523)&
              &*XX(91)-JVS(588)*XX(97)-JVS(599)*XX(98)-JVS(616)*XX(100)-JVS(654)*XX(102)-JVS(662)*XX(103)-JVS(702)*XX(105)&
              &-JVS(718)*XX(107)-JVS(725)*XX(108)-JVS(738)*XX(109)-JVS(748)*XX(110)-JVS(780)*XX(112)-JVS(790)*XX(113)&
              &-JVS(815)*XX(116)-JVS(838)*XX(117)-JVS(859)*XX(119)-JVS(867)*XX(120)-JVS(881)*XX(121)-JVS(891)*XX(122)&
              &-JVS(904)*XX(123)-JVS(918)*XX(124)-JVS(931)*XX(125)-JVS(965)*XX(126)-JVS(986)*XX(127)-JVS(1001)*XX(128)&
              &-JVS(1020)*XX(130)-JVS(1096)*XX(131)-JVS(1109)*XX(132)-JVS(1118)*XX(133)-JVS(1155)*XX(134)-JVS(1206)*XX(135)&
              &-JVS(1220)*XX(136)-JVS(1235)*XX(137)-JVS(1248)*XX(138)-JVS(1292)*XX(139)-JVS(1311)*XX(140)-JVS(1323)*XX(141)&
              &-JVS(1340)*XX(142)-JVS(1363)*XX(143)-JVS(1408)*XX(144)-JVS(1438)*XX(145)-JVS(1502)*XX(146)-JVS(1563)*XX(147)&
              &-JVS(1687)*XX(148)-JVS(1715)*XX(149)-JVS(1732)*XX(150)-JVS(1819)*XX(151))/(JVS(1884))
  XX(153) = (X(153)-JVS(34)*XX(3)-JVS(47)*XX(5)-JVS(65)*XX(9)-JVS(94)*XX(15)-JVS(111)*XX(17)-JVS(118)*XX(18)-JVS(157)&
              &*XX(22)-JVS(232)*XX(42)-JVS(235)*XX(43)-JVS(255)*XX(47)-JVS(261)*XX(48)-JVS(454)*XX(82)-JVS(483)*XX(85)&
              &-JVS(524)*XX(91)-JVS(589)*XX(97)-JVS(600)*XX(98)-JVS(617)*XX(100)-JVS(623)*XX(101)-JVS(655)*XX(102)-JVS(663)&
              &*XX(103)-JVS(703)*XX(105)-JVS(708)*XX(106)-JVS(719)*XX(107)-JVS(726)*XX(108)-JVS(739)*XX(109)-JVS(749)&
              &*XX(110)-JVS(781)*XX(112)-JVS(791)*XX(113)-JVS(816)*XX(116)-JVS(839)*XX(117)-JVS(860)*XX(119)-JVS(868)&
              &*XX(120)-JVS(882)*XX(121)-JVS(892)*XX(122)-JVS(905)*XX(123)-JVS(919)*XX(124)-JVS(932)*XX(125)-JVS(966)&
              &*XX(126)-JVS(987)*XX(127)-JVS(1002)*XX(128)-JVS(1011)*XX(129)-JVS(1021)*XX(130)-JVS(1097)*XX(131)-JVS(1110)&
              &*XX(132)-JVS(1119)*XX(133)-JVS(1156)*XX(134)-JVS(1207)*XX(135)-JVS(1221)*XX(136)-JVS(1236)*XX(137)-JVS(1249)&
              &*XX(138)-JVS(1293)*XX(139)-JVS(1312)*XX(140)-JVS(1324)*XX(141)-JVS(1341)*XX(142)-JVS(1364)*XX(143)-JVS(1409)&
              &*XX(144)-JVS(1439)*XX(145)-JVS(1503)*XX(146)-JVS(1564)*XX(147)-JVS(1688)*XX(148)-JVS(1716)*XX(149)-JVS(1733)&
              &*XX(150)-JVS(1820)*XX(151)-JVS(1885)*XX(152))/(JVS(1945))
  XX(154) = (X(154)-JVS(35)*XX(3)-JVS(48)*XX(5)-JVS(55)*XX(7)-JVS(95)*XX(15)-JVS(119)*XX(18)-JVS(125)*XX(19)-JVS(180)&
              &*XX(27)-JVS(216)*XX(38)-JVS(219)*XX(39)-JVS(229)*XX(41)-JVS(277)*XX(51)-JVS(281)*XX(52)-JVS(287)*XX(53)&
              &-JVS(309)*XX(57)-JVS(404)*XX(75)-JVS(516)*XX(90)-JVS(525)*XX(91)-JVS(549)*XX(95)-JVS(555)*XX(96)-JVS(590)&
              &*XX(97)-JVS(656)*XX(102)-JVS(709)*XX(106)-JVS(727)*XX(108)-JVS(750)*XX(110)-JVS(792)*XX(113)-JVS(810)*XX(115)&
              &-JVS(817)*XX(116)-JVS(840)*XX(117)-JVS(861)*XX(119)-JVS(869)*XX(120)-JVS(893)*XX(122)-JVS(906)*XX(123)&
              &-JVS(920)*XX(124)-JVS(933)*XX(125)-JVS(967)*XX(126)-JVS(988)*XX(127)-JVS(1003)*XX(128)-JVS(1098)*XX(131)&
              &-JVS(1111)*XX(132)-JVS(1120)*XX(133)-JVS(1157)*XX(134)-JVS(1208)*XX(135)-JVS(1222)*XX(136)-JVS(1237)*XX(137)&
              &-JVS(1250)*XX(138)-JVS(1294)*XX(139)-JVS(1313)*XX(140)-JVS(1325)*XX(141)-JVS(1342)*XX(142)-JVS(1365)*XX(143)&
              &-JVS(1410)*XX(144)-JVS(1440)*XX(145)-JVS(1504)*XX(146)-JVS(1565)*XX(147)-JVS(1689)*XX(148)-JVS(1717)*XX(149)&
              &-JVS(1734)*XX(150)-JVS(1821)*XX(151)-JVS(1886)*XX(152)-JVS(1946)*XX(153))/(JVS(2009))
  XX(155) = (X(155)-JVS(36)*XX(3)-JVS(49)*XX(5)-JVS(66)*XX(9)-JVS(158)*XX(22)-JVS(171)*XX(23)-JVS(223)*XX(40)-JVS(236)&
              &*XX(43)-JVS(240)*XX(44)-JVS(244)*XX(45)-JVS(248)*XX(46)-JVS(271)*XX(50)-JVS(297)*XX(54)-JVS(301)*XX(55)&
              &-JVS(305)*XX(56)-JVS(315)*XX(58)-JVS(323)*XX(60)-JVS(327)*XX(61)-JVS(332)*XX(62)-JVS(337)*XX(63)-JVS(341)&
              &*XX(64)-JVS(345)*XX(65)-JVS(355)*XX(67)-JVS(368)*XX(68)-JVS(372)*XX(69)-JVS(385)*XX(71)-JVS(389)*XX(72)&
              &-JVS(393)*XX(73)-JVS(398)*XX(74)-JVS(405)*XX(75)-JVS(412)*XX(76)-JVS(424)*XX(78)-JVS(439)*XX(80)-JVS(455)&
              &*XX(82)-JVS(491)*XX(86)-JVS(496)*XX(87)-JVS(503)*XX(88)-JVS(591)*XX(97)-JVS(601)*XX(98)-JVS(611)*XX(99)&
              &-JVS(618)*XX(100)-JVS(624)*XX(101)-JVS(657)*XX(102)-JVS(664)*XX(103)-JVS(678)*XX(104)-JVS(704)*XX(105)&
              &-JVS(710)*XX(106)-JVS(720)*XX(107)-JVS(728)*XX(108)-JVS(740)*XX(109)-JVS(751)*XX(110)-JVS(758)*XX(111)&
              &-JVS(782)*XX(112)-JVS(793)*XX(113)-JVS(804)*XX(114)-JVS(811)*XX(115)-JVS(818)*XX(116)-JVS(841)*XX(117)&
              &-JVS(851)*XX(118)-JVS(862)*XX(119)-JVS(870)*XX(120)-JVS(883)*XX(121)-JVS(894)*XX(122)-JVS(907)*XX(123)&
              &-JVS(921)*XX(124)-JVS(934)*XX(125)-JVS(968)*XX(126)-JVS(989)*XX(127)-JVS(1004)*XX(128)-JVS(1022)*XX(130)&
              &-JVS(1099)*XX(131)-JVS(1112)*XX(132)-JVS(1158)*XX(134)-JVS(1209)*XX(135)-JVS(1223)*XX(136)-JVS(1238)*XX(137)&
              &-JVS(1251)*XX(138)-JVS(1295)*XX(139)-JVS(1314)*XX(140)-JVS(1326)*XX(141)-JVS(1343)*XX(142)-JVS(1366)*XX(143)&
              &-JVS(1411)*XX(144)-JVS(1441)*XX(145)-JVS(1505)*XX(146)-JVS(1566)*XX(147)-JVS(1690)*XX(148)-JVS(1718)*XX(149)&
              &-JVS(1735)*XX(150)-JVS(1822)*XX(151)-JVS(1887)*XX(152)-JVS(1947)*XX(153)-JVS(2010)*XX(154))/(JVS(2118))
  XX(155) = XX(155)
  XX(154) = XX(154)-JVS(2117)*XX(155)
  XX(153) = XX(153)-JVS(2008)*XX(154)-JVS(2116)*XX(155)
  XX(152) = XX(152)-JVS(1944)*XX(153)-JVS(2007)*XX(154)-JVS(2115)*XX(155)
  XX(151) = XX(151)-JVS(1883)*XX(152)-JVS(1943)*XX(153)-JVS(2006)*XX(154)-JVS(2114)*XX(155)
  XX(150) = XX(150)-JVS(1817)*XX(151)-JVS(1882)*XX(152)-JVS(1942)*XX(153)-JVS(2005)*XX(154)-JVS(2113)*XX(155)
  XX(149) = XX(149)-JVS(1729)*XX(150)-JVS(1816)*XX(151)-JVS(1881)*XX(152)-JVS(1941)*XX(153)-JVS(2004)*XX(154)-JVS(2112)&
              &*XX(155)
  XX(148) = XX(148)-JVS(1711)*XX(149)-JVS(1728)*XX(150)-JVS(1815)*XX(151)-JVS(1880)*XX(152)-JVS(1940)*XX(153)-JVS(2003)&
              &*XX(154)-JVS(2111)*XX(155)
  XX(147) = XX(147)-JVS(1682)*XX(148)-JVS(1710)*XX(149)-JVS(1727)*XX(150)-JVS(1814)*XX(151)-JVS(1879)*XX(152)-JVS(1939)&
              &*XX(153)-JVS(2002)*XX(154)-JVS(2110)*XX(155)
  XX(146) = XX(146)-JVS(1557)*XX(147)-JVS(1681)*XX(148)-JVS(1709)*XX(149)-JVS(1726)*XX(150)-JVS(1813)*XX(151)-JVS(1878)&
              &*XX(152)-JVS(1938)*XX(153)-JVS(2001)*XX(154)-JVS(2109)*XX(155)
  XX(145) = XX(145)-JVS(1495)*XX(146)-JVS(1556)*XX(147)-JVS(1680)*XX(148)-JVS(1708)*XX(149)-JVS(1812)*XX(151)-JVS(1877)&
              &*XX(152)-JVS(1937)*XX(153)-JVS(2000)*XX(154)-JVS(2108)*XX(155)
  XX(144) = XX(144)-JVS(1494)*XX(146)-JVS(1555)*XX(147)-JVS(1679)*XX(148)-JVS(1707)*XX(149)-JVS(1811)*XX(151)-JVS(1876)&
              &*XX(152)-JVS(1936)*XX(153)-JVS(1999)*XX(154)-JVS(2107)*XX(155)
  XX(143) = XX(143)-JVS(1399)*XX(144)-JVS(1430)*XX(145)-JVS(1493)*XX(146)-JVS(1554)*XX(147)-JVS(1678)*XX(148)-JVS(1810)&
              &*XX(151)-JVS(1875)*XX(152)-JVS(1935)*XX(153)-JVS(1998)*XX(154)-JVS(2106)*XX(155)
  XX(142) = XX(142)-JVS(1398)*XX(144)-JVS(1429)*XX(145)-JVS(1492)*XX(146)-JVS(1553)*XX(147)-JVS(1677)*XX(148)-JVS(1706)&
              &*XX(149)-JVS(1809)*XX(151)-JVS(1874)*XX(152)-JVS(1934)*XX(153)-JVS(1997)*XX(154)-JVS(2105)*XX(155)
  XX(141) = XX(141)-JVS(1333)*XX(142)-JVS(1355)*XX(143)-JVS(1397)*XX(144)-JVS(1428)*XX(145)-JVS(1491)*XX(146)-JVS(1552)&
              &*XX(147)-JVS(1676)*XX(148)-JVS(1705)*XX(149)-JVS(1725)*XX(150)-JVS(1808)*XX(151)-JVS(1873)*XX(152)-JVS(1933)&
              &*XX(153)-JVS(1996)*XX(154)-JVS(2104)*XX(155)
  XX(140) = XX(140)-JVS(1354)*XX(143)-JVS(1396)*XX(144)-JVS(1427)*XX(145)-JVS(1490)*XX(146)-JVS(1551)*XX(147)-JVS(1675)&
              &*XX(148)-JVS(1807)*XX(151)-JVS(1872)*XX(152)-JVS(1932)*XX(153)-JVS(1995)*XX(154)-JVS(2103)*XX(155)
  XX(139) = XX(139)-JVS(1550)*XX(147)-JVS(1674)*XX(148)-JVS(1806)*XX(151)-JVS(1871)*XX(152)-JVS(1931)*XX(153)-JVS(1994)&
              &*XX(154)-JVS(2102)*XX(155)
  XX(138) = XX(138)-JVS(1279)*XX(139)-JVS(1304)*XX(140)-JVS(1332)*XX(142)-JVS(1353)*XX(143)-JVS(1395)*XX(144)-JVS(1426)&
              &*XX(145)-JVS(1489)*XX(146)-JVS(1549)*XX(147)-JVS(1673)*XX(148)-JVS(1704)*XX(149)-JVS(1724)*XX(150)-JVS(1805)&
              &*XX(151)-JVS(1870)*XX(152)-JVS(1930)*XX(153)-JVS(1993)*XX(154)-JVS(2101)*XX(155)
  XX(137) = XX(137)-JVS(1278)*XX(139)-JVS(1303)*XX(140)-JVS(1394)*XX(144)-JVS(1425)*XX(145)-JVS(1488)*XX(146)-JVS(1548)&
              &*XX(147)-JVS(1672)*XX(148)-JVS(1703)*XX(149)-JVS(1804)*XX(151)-JVS(1869)*XX(152)-JVS(1929)*XX(153)-JVS(1992)&
              &*XX(154)-JVS(2100)*XX(155)
  XX(136) = XX(136)-JVS(1277)*XX(139)-JVS(1393)*XX(144)-JVS(1424)*XX(145)-JVS(1487)*XX(146)-JVS(1547)*XX(147)-JVS(1671)&
              &*XX(148)-JVS(1803)*XX(151)-JVS(1868)*XX(152)-JVS(1928)*XX(153)-JVS(1991)*XX(154)-JVS(2099)*XX(155)
  XX(135) = XX(135)-JVS(1546)*XX(147)-JVS(1670)*XX(148)-JVS(1802)*XX(151)-JVS(1867)*XX(152)-JVS(1990)*XX(154)-JVS(2098)&
              &*XX(155)
  XX(134) = XX(134)-JVS(1545)*XX(147)-JVS(1669)*XX(148)-JVS(1801)*XX(151)-JVS(1866)*XX(152)-JVS(1927)*XX(153)-JVS(1989)&
              &*XX(154)-JVS(2097)*XX(155)
  XX(133) = XX(133)-JVS(1141)*XX(134)-JVS(1189)*XX(135)-JVS(1243)*XX(138)-JVS(1276)*XX(139)-JVS(1352)*XX(143)-JVS(1392)&
              &*XX(144)-JVS(1423)*XX(145)-JVS(1486)*XX(146)-JVS(1544)*XX(147)-JVS(1668)*XX(148)-JVS(1702)*XX(149)-JVS(1800)&
              &*XX(151)-JVS(1865)*XX(152)-JVS(1926)*XX(153)-JVS(1988)*XX(154)-JVS(2096)*XX(155)
  XX(132) = XX(132)-JVS(1275)*XX(139)-JVS(1391)*XX(144)-JVS(1422)*XX(145)-JVS(1485)*XX(146)-JVS(1543)*XX(147)-JVS(1667)&
              &*XX(148)-JVS(1701)*XX(149)-JVS(1799)*XX(151)-JVS(1864)*XX(152)-JVS(1925)*XX(153)-JVS(1987)*XX(154)-JVS(2095)&
              &*XX(155)
  XX(131) = XX(131)-JVS(1542)*XX(147)-JVS(1666)*XX(148)-JVS(1798)*XX(151)-JVS(1986)*XX(154)-JVS(2094)*XX(155)
  XX(130) = XX(130)-JVS(1075)*XX(131)-JVS(1188)*XX(135)-JVS(1274)*XX(139)-JVS(1302)*XX(140)-JVS(1390)*XX(144)-JVS(1421)&
              &*XX(145)-JVS(1484)*XX(146)-JVS(1541)*XX(147)-JVS(1665)*XX(148)-JVS(1700)*XX(149)-JVS(1797)*XX(151)-JVS(1863)&
              &*XX(152)-JVS(1924)*XX(153)-JVS(1985)*XX(154)-JVS(2093)*XX(155)
  XX(129) = XX(129)-JVS(1074)*XX(131)-JVS(1140)*XX(134)-JVS(1187)*XX(135)-JVS(1228)*XX(137)-JVS(1273)*XX(139)-JVS(1301)&
              &*XX(140)-JVS(1351)*XX(143)-JVS(1389)*XX(144)-JVS(1483)*XX(146)-JVS(1540)*XX(147)-JVS(1664)*XX(148)-JVS(1699)&
              &*XX(149)-JVS(1796)*XX(151)-JVS(1862)*XX(152)-JVS(1923)*XX(153)-JVS(1984)*XX(154)-JVS(2092)*XX(155)
  XX(128) = XX(128)-JVS(1073)*XX(131)-JVS(1139)*XX(134)-JVS(1482)*XX(146)-JVS(1663)*XX(148)-JVS(1698)*XX(149)-JVS(1795)&
              &*XX(151)-JVS(1861)*XX(152)-JVS(1922)*XX(153)-JVS(2091)*XX(155)
  XX(127) = XX(127)-JVS(1072)*XX(131)-JVS(1138)*XX(134)-JVS(1481)*XX(146)-JVS(1662)*XX(148)-JVS(1794)*XX(151)-JVS(1860)&
              &*XX(152)-JVS(1921)*XX(153)-JVS(2090)*XX(155)
  XX(126) = XX(126)-JVS(1071)*XX(131)-JVS(1539)*XX(147)-JVS(1661)*XX(148)-JVS(1793)*XX(151)-JVS(1983)*XX(154)-JVS(2089)&
              &*XX(155)
  XX(125) = XX(125)-JVS(952)*XX(126)-JVS(976)*XX(127)-JVS(1070)*XX(131)-JVS(1137)*XX(134)-JVS(1186)*XX(135)-JVS(1350)&
              &*XX(143)-JVS(1480)*XX(146)-JVS(1538)*XX(147)-JVS(1660)*XX(148)-JVS(1792)*XX(151)-JVS(1859)*XX(152)-JVS(1920)&
              &*XX(153)-JVS(2088)*XX(155)
  XX(124) = XX(124)-JVS(926)*XX(125)-JVS(951)*XX(126)-JVS(975)*XX(127)-JVS(1069)*XX(131)-JVS(1136)*XX(134)-JVS(1185)&
              &*XX(135)-JVS(1479)*XX(146)-JVS(1537)*XX(147)-JVS(1659)*XX(148)-JVS(1791)*XX(151)-JVS(1858)*XX(152)-JVS(1919)&
              &*XX(153)-JVS(2087)*XX(155)
  XX(123) = XX(123)-JVS(913)*XX(124)-JVS(925)*XX(125)-JVS(950)*XX(126)-JVS(974)*XX(127)-JVS(1068)*XX(131)-JVS(1135)&
              &*XX(134)-JVS(1184)*XX(135)-JVS(1478)*XX(146)-JVS(1658)*XX(148)-JVS(1790)*XX(151)-JVS(1857)*XX(152)-JVS(1918)&
              &*XX(153)-JVS(2086)*XX(155)
  XX(122) = XX(122)-JVS(949)*XX(126)-JVS(1067)*XX(131)-JVS(1183)*XX(135)-JVS(1388)*XX(144)-JVS(1420)*XX(145)-JVS(1477)&
              &*XX(146)-JVS(1536)*XX(147)-JVS(1657)*XX(148)-JVS(1789)*XX(151)-JVS(1856)*XX(152)-JVS(1917)*XX(153)-JVS(1982)&
              &*XX(154)-JVS(2085)*XX(155)
  XX(121) = XX(121)-JVS(1066)*XX(131)-JVS(1134)*XX(134)-JVS(1300)*XX(140)-JVS(1349)*XX(143)-JVS(1387)*XX(144)-JVS(1476)&
              &*XX(146)-JVS(1656)*XX(148)-JVS(1788)*XX(151)-JVS(1855)*XX(152)-JVS(1916)*XX(153)-JVS(2084)*XX(155)
  XX(120) = XX(120)-JVS(1065)*XX(131)-JVS(1133)*XX(134)-JVS(1182)*XX(135)-JVS(1272)*XX(139)-JVS(1348)*XX(143)-JVS(1386)&
              &*XX(144)-JVS(1419)*XX(145)-JVS(1475)*XX(146)-JVS(1655)*XX(148)-JVS(1787)*XX(151)-JVS(1854)*XX(152)-JVS(1915)&
              &*XX(153)-JVS(2083)*XX(155)
  XX(119) = XX(119)-JVS(1064)*XX(131)-JVS(1271)*XX(139)-JVS(1385)*XX(144)-JVS(1418)*XX(145)-JVS(1474)*XX(146)-JVS(1654)&
              &*XX(148)-JVS(1786)*XX(151)-JVS(1853)*XX(152)-JVS(1914)*XX(153)-JVS(1981)*XX(154)-JVS(2082)*XX(155)
  XX(118) = XX(118)-JVS(873)*XX(121)-JVS(948)*XX(126)-JVS(1063)*XX(131)-JVS(1181)*XX(135)-JVS(1270)*XX(139)-JVS(1384)&
              &*XX(144)-JVS(1473)*XX(146)-JVS(1535)*XX(147)-JVS(1653)*XX(148)-JVS(1785)*XX(151)-JVS(1852)*XX(152)-JVS(1913)&
              &*XX(153)-JVS(1980)*XX(154)-JVS(2081)*XX(155)
  XX(117) = XX(117)-JVS(1062)*XX(131)-JVS(1180)*XX(135)-JVS(1534)*XX(147)-JVS(1652)*XX(148)-JVS(1784)*XX(151)-JVS(1912)&
              &*XX(153)
  XX(116) = XX(116)-JVS(826)*XX(117)-JVS(853)*XX(119)-JVS(1061)*XX(131)-JVS(1102)*XX(132)-JVS(1179)*XX(135)-JVS(1347)&
              &*XX(143)-JVS(1383)*XX(144)-JVS(1472)*XX(146)-JVS(1533)*XX(147)-JVS(1651)*XX(148)-JVS(1783)*XX(151)-JVS(1851)&
              &*XX(152)-JVS(1911)*XX(153)-JVS(2080)*XX(155)
  XX(115) = XX(115)-JVS(825)*XX(117)-JVS(992)*XX(128)-JVS(1060)*XX(131)-JVS(1132)*XX(134)-JVS(1269)*XX(139)-JVS(1471)&
              &*XX(146)-JVS(1532)*XX(147)-JVS(1650)*XX(148)-JVS(1697)*XX(149)-JVS(1782)*XX(151)-JVS(1850)*XX(152)-JVS(1910)&
              &*XX(153)-JVS(1979)*XX(154)-JVS(2079)*XX(155)
  XX(114) = XX(114)-JVS(1059)*XX(131)-JVS(1178)*XX(135)-JVS(1268)*XX(139)-JVS(1470)*XX(146)-JVS(1531)*XX(147)-JVS(1649)&
              &*XX(148)-JVS(1781)*XX(151)-JVS(1909)*XX(153)-JVS(1978)*XX(154)-JVS(2078)*XX(155)
  XX(113) = XX(113)-JVS(824)*XX(117)-JVS(1058)*XX(131)-JVS(1131)*XX(134)-JVS(1382)*XX(144)-JVS(1469)*XX(146)-JVS(1648)&
              &*XX(148)-JVS(1780)*XX(151)-JVS(1849)*XX(152)-JVS(1908)*XX(153)-JVS(2077)*XX(155)
  XX(112) = XX(112)-JVS(947)*XX(126)-JVS(1057)*XX(131)-JVS(1530)*XX(147)-JVS(1647)*XX(148)-JVS(2076)*XX(155)
  XX(111) = XX(111)-JVS(766)*XX(112)-JVS(795)*XX(114)-JVS(823)*XX(117)-JVS(844)*XX(118)-JVS(872)*XX(121)-JVS(1056)&
              &*XX(131)-JVS(1177)*XX(135)-JVS(1267)*XX(139)-JVS(1381)*XX(144)-JVS(1468)*XX(146)-JVS(1529)*XX(147)-JVS(1646)&
              &*XX(148)-JVS(1779)*XX(151)-JVS(1848)*XX(152)-JVS(1977)*XX(154)-JVS(2075)*XX(155)
  XX(110) = XX(110)-JVS(1055)*XX(131)-JVS(1130)*XX(134)-JVS(1266)*XX(139)-JVS(1380)*XX(144)-JVS(1467)*XX(146)-JVS(1645)&
              &*XX(148)-JVS(1778)*XX(151)-JVS(1847)*XX(152)-JVS(1907)*XX(153)-JVS(2074)*XX(155)
  XX(109) = XX(109)-JVS(1054)*XX(131)-JVS(1176)*XX(135)-JVS(1265)*XX(139)-JVS(1466)*XX(146)-JVS(1644)*XX(148)-JVS(1777)&
              &*XX(151)-JVS(1846)*XX(152)-JVS(1906)*XX(153)-JVS(2073)*XX(155)
  XX(108) = XX(108)-JVS(912)*XX(124)-JVS(946)*XX(126)-JVS(973)*XX(127)-JVS(1053)*XX(131)-JVS(1129)*XX(134)-JVS(1465)&
              &*XX(146)-JVS(1643)*XX(148)-JVS(1776)*XX(151)-JVS(1845)*XX(152)-JVS(1905)*XX(153)-JVS(1976)*XX(154)-JVS(2072)&
              &*XX(155)
  XX(107) = XX(107)-JVS(731)*XX(109)-JVS(1052)*XX(131)-JVS(1379)*XX(144)-JVS(1464)*XX(146)-JVS(1528)*XX(147)-JVS(1642)&
              &*XX(148)-JVS(1775)*XX(151)-JVS(1844)*XX(152)-JVS(1904)*XX(153)-JVS(2071)*XX(155)
  XX(106) = XX(106)-JVS(822)*XX(117)-JVS(945)*XX(126)-JVS(1051)*XX(131)-JVS(1242)*XX(138)-JVS(1346)*XX(143)-JVS(1378)&
              &*XX(144)-JVS(1417)*XX(145)-JVS(1463)*XX(146)-JVS(1641)*XX(148)-JVS(1774)*XX(151)-JVS(1903)*XX(153)-JVS(1975)&
              &*XX(154)-JVS(2070)*XX(155)
  XX(105) = XX(105)-JVS(1050)*XX(131)-JVS(1640)*XX(148)-JVS(2069)*XX(155)
  XX(104) = XX(104)-JVS(765)*XX(112)-JVS(944)*XX(126)-JVS(1049)*XX(131)-JVS(1175)*XX(135)-JVS(1264)*XX(139)-JVS(1462)&
              &*XX(146)-JVS(1527)*XX(147)-JVS(1639)*XX(148)-JVS(1773)*XX(151)-JVS(1843)*XX(152)-JVS(2068)*XX(155)
  XX(103) = XX(103)-JVS(911)*XX(124)-JVS(943)*XX(126)-JVS(972)*XX(127)-JVS(1048)*XX(131)-JVS(1128)*XX(134)-JVS(1174)&
              &*XX(135)-JVS(1461)*XX(146)-JVS(1638)*XX(148)-JVS(1772)*XX(151)-JVS(1842)*XX(152)-JVS(1902)*XX(153)-JVS(1974)&
              &*XX(154)-JVS(2067)*XX(155)
  XX(102) = XX(102)-JVS(1637)*XX(148)-JVS(1771)*XX(151)-JVS(1973)*XX(154)
  XX(101) = XX(101)-JVS(680)*XX(105)-JVS(821)*XX(117)-JVS(942)*XX(126)-JVS(1047)*XX(131)-JVS(1241)*XX(138)-JVS(1345)&
              &*XX(143)-JVS(1377)*XX(144)-JVS(1416)*XX(145)-JVS(1460)*XX(146)-JVS(1636)*XX(148)-JVS(1770)*XX(151)-JVS(1901)&
              &*XX(153)-JVS(2066)*XX(155)
  XX(100) = XX(100)-JVS(634)*XX(102)-JVS(910)*XX(124)-JVS(971)*XX(127)-JVS(1046)*XX(131)-JVS(1127)*XX(134)-JVS(1173)&
              &*XX(135)-JVS(1459)*XX(146)-JVS(1635)*XX(148)-JVS(1769)*XX(151)-JVS(1841)*XX(152)-JVS(1900)*XX(153)-JVS(1972)&
              &*XX(154)-JVS(2065)*XX(155)
  XX(99) = XX(99)-JVS(764)*XX(112)-JVS(1045)*XX(131)-JVS(1172)*XX(135)-JVS(1634)*XX(148)-JVS(1768)*XX(151)-JVS(1840)&
             &*XX(152)-JVS(1971)*XX(154)-JVS(2064)*XX(155)
  XX(98) = XX(98)-JVS(679)*XX(105)-JVS(1044)*XX(131)-JVS(1376)*XX(144)-JVS(1458)*XX(146)-JVS(1633)*XX(148)-JVS(1767)&
             &*XX(151)-JVS(1839)*XX(152)-JVS(1899)*XX(153)-JVS(2063)*XX(155)
  XX(97) = XX(97)-JVS(1632)*XX(148)-JVS(1898)*XX(153)
  XX(96) = XX(96)-JVS(559)*XX(97)-JVS(742)*XX(110)-JVS(784)*XX(113)-JVS(1043)*XX(131)-JVS(1126)*XX(134)-JVS(1457)&
             &*XX(146)-JVS(1526)*XX(147)-JVS(1631)*XX(148)-JVS(1696)*XX(149)-JVS(1766)*XX(151)-JVS(1897)*XX(153)-JVS(1970)&
             &*XX(154)-JVS(2062)*XX(155)
  XX(95) = XX(95)-JVS(550)*XX(96)-JVS(885)*XX(122)-JVS(1042)*XX(131)-JVS(1212)*XX(136)-JVS(1240)*XX(138)-JVS(1263)&
             &*XX(139)-JVS(1318)*XX(141)-JVS(1331)*XX(142)-JVS(1456)*XX(146)-JVS(1525)*XX(147)-JVS(1630)*XX(148)-JVS(1695)&
             &*XX(149)-JVS(1723)*XX(150)-JVS(1765)*XX(151)-JVS(1838)*XX(152)-JVS(1896)*XX(153)-JVS(1969)*XX(154)-JVS(2061)&
             &*XX(155)
  XX(94) = XX(94)-JVS(1041)*XX(131)-JVS(1455)*XX(146)-JVS(1524)*XX(147)-JVS(1629)*XX(148)-JVS(1764)*XX(151)-JVS(1968)&
             &*XX(154)-JVS(2060)*XX(155)
  XX(93) = XX(93)-JVS(602)*XX(99)-JVS(633)*XX(102)-JVS(671)*XX(104)-JVS(794)*XX(114)-JVS(820)*XX(117)-JVS(843)*XX(118)&
             &-JVS(1040)*XX(131)-JVS(1227)*XX(137)-JVS(1523)*XX(147)-JVS(1628)*XX(148)-JVS(1694)*XX(149)-JVS(1763)*XX(151)&
             &-JVS(2059)*XX(155)
  XX(92) = XX(92)-JVS(1039)*XX(131)-JVS(1211)*XX(136)-JVS(1262)*XX(139)-JVS(1454)*XX(146)-JVS(1522)*XX(147)-JVS(1627)&
             &*XX(148)-JVS(1722)*XX(150)-JVS(1762)*XX(151)-JVS(1967)*XX(154)-JVS(2058)*XX(155)
  XX(91) = XX(91)-JVS(632)*XX(102)-JVS(909)*XX(124)-JVS(1626)*XX(148)-JVS(1837)*XX(152)-JVS(1966)*XX(154)-JVS(2057)&
             &*XX(155)
  XX(90) = XX(90)-JVS(1038)*XX(131)-JVS(1261)*XX(139)-JVS(1521)*XX(147)-JVS(1625)*XX(148)-JVS(1761)*XX(151)-JVS(1836)&
             &*XX(152)-JVS(1895)*XX(153)-JVS(1965)*XX(154)-JVS(2056)*XX(155)
  XX(89) = XX(89)-JVS(1171)*XX(135)-JVS(1453)*XX(146)-JVS(1520)*XX(147)-JVS(1624)*XX(148)-JVS(1760)*XX(151)-JVS(1835)&
             &*XX(152)-JVS(1894)*XX(153)-JVS(1964)*XX(154)-JVS(2055)*XX(155)
  XX(88) = XX(88)-JVS(558)*XX(97)-JVS(1037)*XX(131)-JVS(1170)*XX(135)-JVS(1260)*XX(139)-JVS(1452)*XX(146)-JVS(1623)&
             &*XX(148)-JVS(1759)*XX(151)-JVS(1963)*XX(154)-JVS(2054)*XX(155)
  XX(87) = XX(87)-JVS(631)*XX(102)-JVS(763)*XX(112)-JVS(941)*XX(126)-JVS(1169)*XX(135)-JVS(1259)*XX(139)-JVS(1299)&
             &*XX(140)-JVS(1375)*XX(144)-JVS(1451)*XX(146)-JVS(1622)*XX(148)-JVS(1758)*XX(151)-JVS(2053)*XX(155)
  XX(86) = XX(86)-JVS(630)*XX(102)-JVS(1298)*XX(140)-JVS(1374)*XX(144)-JVS(1450)*XX(146)-JVS(1621)*XX(148)-JVS(1757)&
             &*XX(151)-JVS(2052)*XX(155)
  XX(85) = XX(85)-JVS(1373)*XX(144)-JVS(1620)*XX(148)-JVS(2051)*XX(155)
  XX(84) = XX(84)-JVS(1168)*XX(135)-JVS(1449)*XX(146)-JVS(1519)*XX(147)-JVS(1619)*XX(148)-JVS(1756)*XX(151)-JVS(1962)&
             &*XX(154)-JVS(2050)*XX(155)
  XX(83) = XX(83)-JVS(557)*XX(97)-JVS(1125)*XX(134)-JVS(1448)*XX(146)-JVS(1518)*XX(147)-JVS(1618)*XX(148)-JVS(1755)&
             &*XX(151)-JVS(1961)*XX(154)-JVS(2049)*XX(155)
  XX(82) = XX(82)-JVS(730)*XX(109)-JVS(1517)*XX(147)-JVS(1617)*XX(148)-JVS(1834)*XX(152)-JVS(1893)*XX(153)
  XX(81) = XX(81)-JVS(762)*XX(112)-JVS(1258)*XX(139)-JVS(1447)*XX(146)-JVS(1516)*XX(147)-JVS(1616)*XX(148)-JVS(1754)&
             &*XX(151)-JVS(1960)*XX(154)-JVS(2048)*XX(155)
  XX(80) = XX(80)-JVS(970)*XX(127)-JVS(1124)*XX(134)-JVS(1615)*XX(148)-JVS(2047)*XX(155)
  XX(79) = XX(79)-JVS(1036)*XX(131)-JVS(1101)*XX(132)-JVS(1257)*XX(139)-JVS(1515)*XX(147)-JVS(1614)*XX(148)-JVS(1693)&
             &*XX(149)-JVS(1753)*XX(151)-JVS(1833)*XX(152)-JVS(1959)*XX(154)
  XX(78) = XX(78)-JVS(1239)*XX(138)-JVS(1344)*XX(143)-JVS(1372)*XX(144)-JVS(1415)*XX(145)-JVS(1613)*XX(148)-JVS(1752)&
             &*XX(151)-JVS(2046)*XX(155)
  XX(77) = XX(77)-JVS(1330)*XX(142)-JVS(1446)*XX(146)-JVS(1514)*XX(147)-JVS(1612)*XX(148)-JVS(1751)*XX(151)-JVS(1958)&
             &*XX(154)-JVS(2045)*XX(155)
  XX(76) = XX(76)-JVS(1035)*XX(131)-JVS(1513)*XX(147)-JVS(1611)*XX(148)-JVS(1750)*XX(151)-JVS(2044)*XX(155)
  XX(75) = XX(75)-JVS(852)*XX(119)-JVS(1034)*XX(131)-JVS(1100)*XX(132)-JVS(1610)*XX(148)-JVS(1832)*XX(152)
  XX(74) = XX(74)-JVS(752)*XX(111)-JVS(842)*XX(118)-JVS(871)*XX(121)-JVS(1371)*XX(144)-JVS(1609)*XX(148)-JVS(1749)&
             &*XX(151)-JVS(2043)*XX(155)
  XX(73) = XX(73)-JVS(670)*XX(104)-JVS(1014)*XX(130)-JVS(1033)*XX(131)-JVS(1226)*XX(137)-JVS(1317)*XX(141)-JVS(1329)&
             &*XX(142)-JVS(1608)*XX(148)-JVS(1721)*XX(150)-JVS(2042)*XX(155)
  XX(72) = XX(72)-JVS(669)*XX(104)-JVS(1013)*XX(130)-JVS(1032)*XX(131)-JVS(1225)*XX(137)-JVS(1316)*XX(141)-JVS(1328)&
             &*XX(142)-JVS(1607)*XX(148)-JVS(1720)*XX(150)-JVS(2041)*XX(155)
  XX(71) = XX(71)-JVS(1256)*XX(139)-JVS(1414)*XX(145)-JVS(1512)*XX(147)-JVS(1606)*XX(148)-JVS(2040)*XX(155)
  XX(70) = XX(70)-JVS(484)*XX(86)-JVS(1413)*XX(145)-JVS(1605)*XX(148)-JVS(1692)*XX(149)-JVS(2039)*XX(155)
  XX(69) = XX(69)-JVS(379)*XX(71)-JVS(761)*XX(112)-JVS(1012)*XX(130)-JVS(1167)*XX(135)-JVS(1255)*XX(139)-JVS(1511)&
             &*XX(147)-JVS(1604)*XX(148)-JVS(2038)*XX(155)
  XX(68) = XX(68)-JVS(1603)*XX(148)-JVS(2037)*XX(155)
  XX(67) = XX(67)-JVS(940)*XX(126)-JVS(1166)*XX(135)-JVS(1445)*XX(146)-JVS(1602)*XX(148)-JVS(1748)*XX(151)-JVS(2036)&
             &*XX(155)
  XX(66) = XX(66)-JVS(556)*XX(97)-JVS(898)*XX(123)-JVS(908)*XX(124)-JVS(924)*XX(125)-JVS(939)*XX(126)-JVS(1165)*XX(135)&
             &-JVS(1831)*XX(152)-JVS(2035)*XX(155)
  XX(65) = XX(65)-JVS(760)*XX(112)-JVS(884)*XX(122)-JVS(1031)*XX(131)-JVS(1164)*XX(135)-JVS(1412)*XX(145)-JVS(1601)&
             &*XX(148)-JVS(1830)*XX(152)-JVS(2034)*XX(155)
  XX(64) = XX(64)-JVS(668)*XX(104)-JVS(1030)*XX(131)-JVS(1224)*XX(137)-JVS(1315)*XX(141)-JVS(1327)*XX(142)-JVS(1600)&
             &*XX(148)-JVS(1719)*XX(150)-JVS(2033)*XX(155)
  XX(63) = XX(63)-JVS(1029)*XX(131)-JVS(1163)*XX(135)-JVS(1510)*XX(147)-JVS(1599)*XX(148)-JVS(1829)*XX(152)-JVS(2032)&
             &*XX(155)
  XX(62) = XX(62)-JVS(1028)*XX(131)-JVS(1210)*XX(136)-JVS(1254)*XX(139)-JVS(1509)*XX(147)-JVS(1598)*XX(148)-JVS(2031)&
             &*XX(155)
  XX(61) = XX(61)-JVS(938)*XX(126)-JVS(1162)*XX(135)-JVS(1444)*XX(146)-JVS(1508)*XX(147)-JVS(1597)*XX(148)-JVS(1747)&
             &*XX(151)-JVS(2030)*XX(155)
  XX(60) = XX(60)-JVS(729)*XX(109)-JVS(1027)*XX(131)-JVS(1161)*XX(135)-JVS(1596)*XX(148)-JVS(1828)*XX(152)
  XX(59) = XX(59)-JVS(350)*XX(67)-JVS(759)*XX(112)-JVS(937)*XX(126)-JVS(1026)*XX(131)-JVS(1160)*XX(135)-JVS(1253)&
             &*XX(139)-JVS(1507)*XX(147)-JVS(1595)*XX(148)-JVS(1827)*XX(152)-JVS(2029)*XX(155)
  XX(58) = XX(58)-JVS(1297)*XX(140)-JVS(1370)*XX(144)-JVS(1594)*XX(148)-JVS(2028)*XX(155)
  XX(57) = XX(57)-JVS(629)*XX(102)-JVS(897)*XX(123)-JVS(936)*XX(126)-JVS(1369)*XX(144)-JVS(1506)*XX(147)-JVS(1593)&
             &*XX(148)-JVS(1746)*XX(151)-JVS(1957)*XX(154)-JVS(2027)*XX(155)
  XX(56) = XX(56)-JVS(783)*XX(113)-JVS(819)*XX(117)-JVS(1368)*XX(144)-JVS(1592)*XX(148)-JVS(1745)*XX(151)-JVS(2026)&
             &*XX(155)
  XX(55) = XX(55)-JVS(741)*XX(110)-JVS(1025)*XX(131)-JVS(1123)*XX(134)-JVS(1252)*XX(139)-JVS(1591)*XX(148)-JVS(2025)&
             &*XX(155)
  XX(54) = XX(54)-JVS(1590)*XX(148)-JVS(2024)*XX(155)
  XX(53) = XX(53)-JVS(628)*XX(102)-JVS(896)*XX(123)-JVS(923)*XX(125)-JVS(1589)*XX(148)-JVS(1826)*XX(152)-JVS(1956)&
             &*XX(154)-JVS(2023)*XX(155)
  XX(52) = XX(52)-JVS(284)*XX(53)-JVS(627)*XX(102)-JVS(895)*XX(123)-JVS(922)*XX(125)-JVS(1588)*XX(148)-JVS(1825)*XX(152)&
             &-JVS(1955)*XX(154)-JVS(2022)*XX(155)
  XX(51) = XX(51)-JVS(1443)*XX(146)-JVS(1691)*XX(149)-JVS(1744)*XX(151)-JVS(1954)*XX(154)
  XX(50) = XX(50)-JVS(991)*XX(128)-JVS(1122)*XX(134)-JVS(1587)*XX(148)-JVS(2021)*XX(155)
  XX(49) = XX(49)-JVS(1743)*XX(151)-JVS(1824)*XX(152)-JVS(1892)*XX(153)-JVS(1953)*XX(154)
  XX(48) = XX(48)-JVS(1121)*XX(134)-JVS(1586)*XX(148)-JVS(2020)*XX(155)
  XX(47) = XX(47)-JVS(1585)*XX(148)-JVS(2019)*XX(155)
  XX(46) = XX(46)-JVS(1584)*XX(148)-JVS(1742)*XX(151)-JVS(1952)*XX(154)-JVS(2018)*XX(155)
  XX(45) = XX(45)-JVS(446)*XX(82)-JVS(712)*XX(107)-JVS(1583)*XX(148)-JVS(2017)*XX(155)
  XX(44) = XX(44)-JVS(593)*XX(98)-JVS(1367)*XX(144)-JVS(1582)*XX(148)-JVS(2016)*XX(155)
  XX(43) = XX(43)-JVS(1024)*XX(131)-JVS(1581)*XX(148)-JVS(1891)*XX(153)-JVS(2015)*XX(155)
  XX(42) = XX(42)-JVS(1023)*XX(131)-JVS(1741)*XX(151)-JVS(1890)*XX(153)-JVS(1951)*XX(154)-JVS(2014)*XX(155)
  XX(41) = XX(41)-JVS(510)*XX(90)-JVS(1740)*XX(151)
  XX(40) = XX(40)-JVS(1580)*XX(148)-JVS(1823)*XX(152)-JVS(1889)*XX(153)
  XX(39) = XX(39)-JVS(626)*XX(102)-JVS(969)*XX(127)-JVS(1579)*XX(148)-JVS(1950)*XX(154)
  XX(38) = XX(38)-JVS(625)*XX(102)-JVS(1296)*XX(140)-JVS(1578)*XX(148)-JVS(1949)*XX(154)
  XX(37) = XX(37)-JVS(667)*XX(104)-JVS(1577)*XX(148)
  XX(36) = XX(36)-JVS(666)*XX(104)-JVS(1576)*XX(148)
  XX(35) = XX(35)-JVS(1575)*XX(148)-JVS(1888)*XX(153)
  XX(34) = XX(34)-JVS(665)*XX(104)-JVS(1574)*XX(148)
  XX(33) = XX(33)-JVS(1442)*XX(146)-JVS(1573)*XX(148)-JVS(1739)*XX(151)
  XX(32) = XX(32)-JVS(278)*XX(52)-JVS(306)*XX(57)-JVS(721)*XX(108)-JVS(1572)*XX(148)-JVS(2013)*XX(155)
  XX(31) = XX(31)-JVS(283)*XX(53)-JVS(612)*XX(100)-JVS(1571)*XX(148)-JVS(2012)*XX(155)
  XX(30) = XX(30)-JVS(282)*XX(53)-JVS(658)*XX(103)-JVS(1570)*XX(148)-JVS(2011)*XX(155)
  XX(29) = XX(29)-JVS(990)*XX(128)-JVS(1738)*XX(151)
  XX(28) = XX(28)-JVS(497)*XX(88)-JVS(1737)*XX(151)
  XX(27) = XX(27)-JVS(1736)*XX(151)-JVS(1948)*XX(154)
  XX(26) = XX(26)-JVS(935)*XX(126)-JVS(1159)*XX(135)-JVS(1569)*XX(148)
  XX(25) = XX(25)-JVS(592)*XX(98)-JVS(711)*XX(107)-JVS(1568)*XX(148)
  XX(24) = XX(24)-JVS(272)*XX(51)-JVS(1567)*XX(148)
  XX(23) = XX(23)
  XX(22) = XX(22)
  XX(21) = XX(21)
  XX(20) = XX(20)
  XX(19) = XX(19)
  XX(18) = XX(18)
  XX(17) = XX(17)
  XX(16) = XX(16)
  XX(15) = XX(15)
  XX(14) = XX(14)
  XX(13) = XX(13)
  XX(12) = XX(12)
  XX(11) = XX(11)
  XX(10) = XX(10)
  XX(9) = XX(9)
  XX(8) = XX(8)
  XX(7) = XX(7)
  XX(6) = XX(6)
  XX(5) = XX(5)
  XX(4) = XX(4)
  XX(3) = XX(3)
  XX(2) = XX(2)
  XX(1) = XX(1)
      
END SUBROUTINE KppSolveTR

! End of KppSolveTR function
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 
! BLAS_UTIL - BLAS-LIKE utility functions
!   Arguments :
! 
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

!--------------------------------------------------------------
!
! BLAS/LAPACK-like subroutines used by the integration algorithms
! It is recommended to replace them by calls to the optimized
!      BLAS/LAPACK library for your machine
!
!  (C) Adrian Sandu, Aug. 2004
!      Virginia Polytechnic Institute and State University
!--------------------------------------------------------------


!--------------------------------------------------------------
      SUBROUTINE WCOPY(N,X,incX,Y,incY)
!--------------------------------------------------------------
!     copies a vector, x, to a vector, y:  y <- x
!     only for incX=incY=1
!     after BLAS
!     replace this by the function from the optimized BLAS implementation:
!         CALL  SCOPY(N,X,1,Y,1)   or   CALL  DCOPY(N,X,1,Y,1)
!--------------------------------------------------------------
!     USE aromatics_kpp_Precision
      
      INTEGER  :: i,incX,incY,M,MP1,N
      REAL(kind=dp) :: X(N),Y(N)

      IF (N.LE.0) RETURN

      M = MOD(N,8)
      IF( M .NE. 0 ) THEN
        DO i = 1,M
          Y(i) = X(i)
        END DO
        IF( N .LT. 8 ) RETURN
      END IF    
      MP1 = M+1
      DO i = MP1,N,8
        Y(i) = X(i)
        Y(i + 1) = X(i + 1)
        Y(i + 2) = X(i + 2)
        Y(i + 3) = X(i + 3)
        Y(i + 4) = X(i + 4)
        Y(i + 5) = X(i + 5)
        Y(i + 6) = X(i + 6)
        Y(i + 7) = X(i + 7)
      END DO

      END SUBROUTINE WCOPY


!--------------------------------------------------------------
      SUBROUTINE WAXPY(N,Alpha,X,incX,Y,incY)
!--------------------------------------------------------------
!     constant times a vector plus a vector: y <- y + Alpha*x
!     only for incX=incY=1
!     after BLAS
!     replace this by the function from the optimized BLAS implementation:
!         CALL SAXPY(N,Alpha,X,1,Y,1) or  CALL DAXPY(N,Alpha,X,1,Y,1)
!--------------------------------------------------------------

      INTEGER  :: i,incX,incY,M,MP1,N
      REAL(kind=dp) :: X(N),Y(N),Alpha
      REAL(kind=dp), PARAMETER :: ZERO = 0.0_dp

      IF (Alpha .EQ. ZERO) RETURN
      IF (N .LE. 0) RETURN

      M = MOD(N,4)
      IF( M .NE. 0 ) THEN
        DO i = 1,M
          Y(i) = Y(i) + Alpha*X(i)
        END DO
        IF( N .LT. 4 ) RETURN
      END IF
      MP1 = M + 1
      DO i = MP1,N,4
        Y(i) = Y(i) + Alpha*X(i)
        Y(i + 1) = Y(i + 1) + Alpha*X(i + 1)
        Y(i + 2) = Y(i + 2) + Alpha*X(i + 2)
        Y(i + 3) = Y(i + 3) + Alpha*X(i + 3)
      END DO
      
      END SUBROUTINE WAXPY



!--------------------------------------------------------------
      SUBROUTINE WSCAL(N,Alpha,X,incX)
!--------------------------------------------------------------
!     constant times a vector: x(1:N) <- Alpha*x(1:N) 
!     only for incX=incY=1
!     after BLAS
!     replace this by the function from the optimized BLAS implementation:
!         CALL SSCAL(N,Alpha,X,1) or  CALL DSCAL(N,Alpha,X,1)
!--------------------------------------------------------------

      INTEGER  :: i,incX,M,MP1,N
      REAL(kind=dp)  :: X(N),Alpha
      REAL(kind=dp), PARAMETER  :: ZERO=0.0_dp, ONE=1.0_dp

      IF (Alpha .EQ. ONE) RETURN
      IF (N .LE. 0) RETURN

      M = MOD(N,5)
      IF( M .NE. 0 ) THEN
        IF (Alpha .EQ. (-ONE)) THEN
          DO i = 1,M
            X(i) = -X(i)
          END DO
        ELSEIF (Alpha .EQ. ZERO) THEN
          DO i = 1,M
            X(i) = ZERO
          END DO
        ELSE
          DO i = 1,M
            X(i) = Alpha*X(i)
          END DO
        END IF
        IF( N .LT. 5 ) RETURN
      END IF
      MP1 = M + 1
      IF (Alpha .EQ. (-ONE)) THEN
        DO i = MP1,N,5
          X(i)     = -X(i)
          X(i + 1) = -X(i + 1)
          X(i + 2) = -X(i + 2)
          X(i + 3) = -X(i + 3)
          X(i + 4) = -X(i + 4)
        END DO
      ELSEIF (Alpha .EQ. ZERO) THEN
        DO i = MP1,N,5
          X(i)     = ZERO
          X(i + 1) = ZERO
          X(i + 2) = ZERO
          X(i + 3) = ZERO
          X(i + 4) = ZERO
        END DO
      ELSE
        DO i = MP1,N,5
          X(i)     = Alpha*X(i)
          X(i + 1) = Alpha*X(i + 1)
          X(i + 2) = Alpha*X(i + 2)
          X(i + 3) = Alpha*X(i + 3)
          X(i + 4) = Alpha*X(i + 4)
        END DO
      END IF

      END SUBROUTINE WSCAL

!--------------------------------------------------------------
      REAL(kind=dp) FUNCTION WLAMCH( C )
!--------------------------------------------------------------
!     returns epsilon machine
!     after LAPACK
!     replace this by the function from the optimized LAPACK implementation:
!          CALL SLAMCH('E') or CALL DLAMCH('E')
!--------------------------------------------------------------
!      USE aromatics_kpp_Precision

      CHARACTER ::  C
      INTEGER    :: i
      REAL(kind=dp), SAVE  ::  Eps
      REAL(kind=dp)  ::  Suma
      REAL(kind=dp), PARAMETER  ::  ONE=1.0_dp, HALF=0.5_dp
      LOGICAL, SAVE   ::  First=.TRUE.
      
      IF (First) THEN
        First = .FALSE.
        Eps = HALF**(16)
        DO i = 17, 80
          Eps = Eps*HALF
          CALL WLAMCH_ADD(ONE,Eps,Suma)
          IF (Suma.LE.ONE) GOTO 10
        END DO
        PRINT*,'ERROR IN WLAMCH. EPS < ',Eps
        RETURN
10      Eps = Eps*2
        i = i-1      
      END IF

      WLAMCH = Eps

      END FUNCTION WLAMCH
     
      SUBROUTINE WLAMCH_ADD( A, B, Suma )
!      USE aromatics_kpp_Precision
      
      REAL(kind=dp) A, B, Suma
      Suma = A + B

      END SUBROUTINE WLAMCH_ADD
!--------------------------------------------------------------


!--------------------------------------------------------------
      SUBROUTINE SET2ZERO(N,Y)
!--------------------------------------------------------------
!     copies zeros into the vector y:  y <- 0
!     after BLAS
!--------------------------------------------------------------
      
      INTEGER ::  i,M,MP1,N
      REAL(kind=dp) ::  Y(N)
      REAL(kind=dp), PARAMETER :: ZERO = 0.0d0

      IF (N.LE.0) RETURN

      M = MOD(N,8)
      IF( M .NE. 0 ) THEN
        DO i = 1,M
          Y(i) = ZERO
        END DO
        IF( N .LT. 8 ) RETURN
      END IF    
      MP1 = M+1
      DO i = MP1,N,8
        Y(i)     = ZERO
        Y(i + 1) = ZERO
        Y(i + 2) = ZERO
        Y(i + 3) = ZERO
        Y(i + 4) = ZERO
        Y(i + 5) = ZERO
        Y(i + 6) = ZERO
        Y(i + 7) = ZERO
      END DO

      END SUBROUTINE SET2ZERO


!--------------------------------------------------------------
      REAL(kind=dp) FUNCTION WDOT (N, DX, incX, DY, incY) 
!--------------------------------------------------------------
!     dot produce: wdot = x(1:N)*y(1:N) 
!     only for incX=incY=1
!     after BLAS
!     replace this by the function from the optimized BLAS implementation:
!         CALL SDOT(N,X,1,Y,1) or  CALL DDOT(N,X,1,Y,1)
!--------------------------------------------------------------
!      USE messy_mecca_kpp_Precision
!--------------------------------------------------------------
      IMPLICIT NONE
      INTEGER :: N, incX, incY
      REAL(kind=dp) :: DX(N), DY(N) 

      INTEGER :: i, IX, IY, M, MP1, NS
                                 
      WDOT = 0.0D0 
      IF (N .LE. 0) RETURN 
      IF (incX .EQ. incY) IF (incX-1) 5,20,60 
!                                                                       
!     Code for unequal or nonpositive increments.                       
!                                                                       
    5 IX = 1 
      IY = 1 
      IF (incX .LT. 0) IX = (-N+1)*incX + 1 
      IF (incY .LT. 0) IY = (-N+1)*incY + 1 
      DO i = 1,N 
        WDOT = WDOT + DX(IX)*DY(IY) 
        IX = IX + incX 
        IY = IY + incY 
      END DO 
      RETURN 
!                                                                       
!     Code for both increments equal to 1.                              
!                                                                       
!     Clean-up loop so remaining vector length is a multiple of 5.      
!                                                                       
   20 M = MOD(N,5) 
      IF (M .EQ. 0) GO TO 40 
      DO i = 1,M 
         WDOT = WDOT + DX(i)*DY(i) 
      END DO 
      IF (N .LT. 5) RETURN 
   40 MP1 = M + 1 
      DO i = MP1,N,5 
          WDOT = WDOT + DX(i)*DY(i) + DX(i+1)*DY(i+1) + DX(i+2)*DY(i+2) +  &
                   DX(i+3)*DY(i+3) + DX(i+4)*DY(i+4)                   
      END DO 
      RETURN 
!                                                                       
!     Code for equal, positive, non-unit increments.                    
!                                                                       
   60 NS = N*incX 
      DO i = 1,NS,incX 
        WDOT = WDOT + DX(i)*DY(i) 
      END DO 

      END FUNCTION WDOT                                          


!--------------------------------------------------------------
      SUBROUTINE WADD(N,X,Y,Z)
!--------------------------------------------------------------
!     adds two vectors: z <- x + y
!     BLAS - like
!--------------------------------------------------------------
!     USE aromatics_kpp_Precision
      
      INTEGER :: i, M, MP1, N
      REAL(kind=dp) :: X(N),Y(N),Z(N)

      IF (N.LE.0) RETURN

      M = MOD(N,5)
      IF( M /= 0 ) THEN
         DO i = 1,M
            Z(i) = X(i) + Y(i)
         END DO
         IF( N < 5 ) RETURN
      END IF    
      MP1 = M+1
      DO i = MP1,N,5
         Z(i)     = X(i)     + Y(i)
         Z(i + 1) = X(i + 1) + Y(i + 1)
         Z(i + 2) = X(i + 2) + Y(i + 2)
         Z(i + 3) = X(i + 3) + Y(i + 3)
         Z(i + 4) = X(i + 4) + Y(i + 4)
      END DO

      END SUBROUTINE WADD
      
      
      
!--------------------------------------------------------------
      SUBROUTINE WGEFA(N,A,Ipvt,info)
!--------------------------------------------------------------
!     WGEFA FACTORS THE MATRIX A (N,N) BY
!           GAUSS ELIMINATION WITH PARTIAL PIVOTING
!     LINPACK - LIKE 
!--------------------------------------------------------------
!
      INTEGER       :: N,Ipvt(N),info
      REAL(kind=dp) :: A(N,N)
      REAL(kind=dp) :: t, dmax, da
      INTEGER       :: j,k,l
      REAL(kind=dp), PARAMETER :: ZERO = 0.0, ONE = 1.0

      info = 0

size: IF (n > 1) THEN
      
col:  DO k = 1, n-1

!        find l = pivot index
!        l = idamax(n-k+1,A(k,k),1) + k - 1
         l = k; dmax = abs(A(k,k))
         DO j = k+1,n
            da = ABS(A(j,k))
            IF (da > dmax) THEN
              l = j; dmax = da
            END IF
         END DO
         Ipvt(k) = l

!        zero pivot implies this column already triangularized
         IF (ABS(A(l,k)) < TINY(ZERO)) THEN
            info = k
            return
         ELSE   
            IF (l /= k) THEN
               t = A(l,k); A(l,k) = A(k,k); A(k,k) = t
            END IF
            t = -ONE/A(k,k)
            CALL WSCAL(n-k,t,A(k+1,k),1)
            DO j = k+1, n
               t = A(l,j)
               IF (l /= k) THEN
                  A(l,j) = A(k,j); A(k,j) = t
               END IF
               CALL WAXPY(n-k,t,A(k+1,k),1,A(k+1,j),1)
            END DO         
         END IF
         
       END DO col
       
      END IF size
      
      Ipvt(N) = N
      IF (ABS(A(N,N)) == ZERO) info = N
      
      END SUBROUTINE WGEFA


!--------------------------------------------------------------
      SUBROUTINE WGESL(Trans,N,A,Ipvt,b)
!--------------------------------------------------------------
!     WGESL solves the system
!     a * x = b  or  trans(a) * x = b
!     using the factors computed by WGEFA.
!
!     Trans      = 'N'   to solve  A*x = b ,
!                = 'T'   to solve  transpose(A)*x = b
!     LINPACK - LIKE 
!--------------------------------------------------------------

      INTEGER       :: N,Ipvt(N)
      CHARACTER     :: trans
      REAL(kind=dp) :: A(N,N),b(N)
      REAL(kind=dp) :: t
      INTEGER       :: k,kb,l

      
      SELECT CASE (Trans)

      CASE ('n','N')  !  Solve  A * x = b

!        first solve  L*y = b
         IF (n >= 2) THEN
          DO k = 1, n-1
            l = Ipvt(k)
            t = b(l)
            IF (l /= k) THEN
               b(l) = b(k)
               b(k) = t
            END IF
            CALL WAXPY(n-k,t,a(k+1,k),1,b(k+1),1)
          END DO
         END IF
!        now solve  U*x = y
         DO kb = 1, n
            k = n + 1 - kb
            b(k) = b(k)/a(k,k)
            t = -b(k)
            CALL WAXPY(k-1,t,a(1,k),1,b(1),1)
         END DO
      
      CASE ('t','T')  !  Solve transpose(A) * x = b

!        first solve  trans(U)*y = b
         DO k = 1, n
            t = WDOT(k-1,a(1,k),1,b(1),1)
            b(k) = (b(k) - t)/a(k,k)
         END DO
!        now solve trans(L)*x = y
         IF (n >= 2) THEN
         DO kb = 1, n-1
            k = n - kb
            b(k) = b(k) + WDOT(n-k,a(k+1,k),1,b(k+1),1)
            l = Ipvt(k)
            IF (l /= k) THEN
               t = b(l); b(l) = b(k); b(k) = t
            END IF
         END DO
         END IF
   
      END SELECT

      END SUBROUTINE WGESL
! End of BLAS_UTIL function
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



END MODULE aromatics_kpp_LinearAlgebra

